【问题标题】:Check if extension was applied to observable检查扩展是否应用于 observable
【发布时间】:2013-04-02 12:37:15
【问题描述】:

我想对我的函数进行单元测试,该函数基本上是从一组参数(TypeScript 代码)构建一个可观察的数组:

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;
    }

我的测试是这样的:

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);

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

编辑:

在另一个函数中,我正在附加订阅者,但我不知道如何测试它们是否正确附加。

【问题讨论】:

    标签: knockout.js knockout-validation knockout-extensions


    【解决方案1】:

    你可以在你的 observable 上调用rules(),它应该给你一个数组。

    observables[parameterName].rules();
    

    【讨论】:

      【解决方案2】:

      我对您的特定情况下的验证插件了解不多,但更笼统地说,我怀疑是否有可能找出 observable 是否已扩展,因为扩展机制非常通用并且不会强加特定的对“扩展的”可观察对象执行操作,将操作的所有细节留给扩展器本身(因此结果可能会有很大差异,从包装可观察对象,订阅它,甚至只是在外部服务中注册可观察对象或介于两者之间)。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        • 1970-01-01
        • 2019-11-29
        • 2020-03-20
        • 2018-08-27
        相关资源
        最近更新 更多