我正在尝试为依赖于其他两个复杂计算的ko.computed
字段编写测试(此处为了演示而删除)。
function PositionsViewModel(options) {
var self = this;
self.computed1 = ko.computed(function() { return 1; });
self.computed2 = ko.computed(function() { return 2; });
self.computedIWantToTest = ko.computed(function() {
return self.computed1() + self.computed2();
});
}
在我的jasmine测试中,我在beforeEach中创建了一个VM实例,如下所示:
this.subject = new PositionsViewModel();
我希望能够存根computed1
和computed2
,以便我可以单独测试computedIWantToTest
。到目前为止,我这样做的尝试都失败了。
我已经尝试直接在vm实例上进行存根。但是,似乎即使方法被覆盖,计算机也会以某种方式缓存该函数。
答案 0 :(得分:0)
一种方法是注入前两个计算函数。
http://jsfiddle.net/kevincollins/RwKAD/
var PositionsViewModel = function (computedService1, computedService2, options) {
this.defaultComputed1 = ko.computed(function() { return 1; });
this.defaultComputed2 = ko.computed(function() { return 2; });
this.computed1 = computedService1 || this.defaultComputed1;
this.computed2 = computedService2 || this.defaultComputed2;
var self = this;
this.computedIWantToTest = ko.computed(function() {
return self.computed1() + self.computed2();
});
};
var vm1 = new PositionsViewModel();
ko.applyBindings(vm1, document.getElementById("o1"));
var ComputedServiceMock1 = ko.computed(function() { return 100; });
var ComputedServiceMock2 = ko.computed(function() { return 200; });
var vm2 = new PositionsViewModel(ComputedServiceMock1, ComputedServiceMock2);
ko.applyBindings(vm2, document.getElementById("o2"));