我正在尝试为一个依赖于另外两个复杂计算的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实例上进行存根。但是,看起来,即使方法被覆盖,计算缓存也会以某种方式缓存函数。
发布于 2013-03-28 10:10:49
一种方法是注入前两个计算函数。
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"));https://stackoverflow.com/questions/15664927
复制相似问题