检查扩展是否应用于observable

Luk*_*sik 6 knockout.js knockout-validation knockout-extensions

我想单元测试我的函数,它基本上从一组参数(TypeScript代码)构建一个observable数组:

private BuildObservables(parameters: Parameter[]) {
        var observables = {};

        for (var parameterName in parameters) {

            var p = parameters[parameterName];

            // Build observable
            observables[parameterName] = ko.observable(p.Value);

            // Attach validation
            if (p.IsRequired) {
                observables[parameterName].extend({ required: true });
            }
        }
        return observables;
    }
Run Code Online (Sandbox Code Playgroud)

我的测试看起来像这样:

var parameters = [];

// new Parameter(int value, bool isRequired)
parameters["Param1"] = new Parameter("123", true);
parameters["Param2"] = new Parameter("456", false);

var viewModel = BuildObservables(parameters);

ok(viewModel["Param1"] != null);
ok(viewModel["Param2"] != null);
Run Code Online (Sandbox Code Playgroud)

如果第一个参数isRequired设置为true,如何检查是否应用了扩展(验证)(BuildObservables中的"附加验证"部分)?

编辑:

在另一个功能我附加订阅者,我不知道如何测试他们是否正确附加.

Gri*_*rim 1

我对您的特定情况的验证插件了解不多,但从更一般的角度来说,我怀疑是否有可能找出可观察量是否已扩展,因为扩展机制非常通用,并且不会强制执行特定操作对“扩展”可观察量执行,将操作的所有细节留给扩展器本身(因此结果可能会有很大差异,从包装可观察量、订阅它,甚至简单地将可观察量注册到外部服务或两者之间的任何内容) )。

如果您的问题仅用于单元测试目的,您可能会考虑模拟扩展函数,以便它将传递给它的参数(即扩展程序)存储在调用它的可观察对象上 - 这样您可以稍后检查所述扩展程序是否存在。

对于更详细的内容,测试库jasmine为模型提供了更多选项,包括检查是否调用特定函数以及是否向其传递了某些特定参数的测试,因此您可能也有兴趣查看它。