我正在尝试为计算的可观察量编写 Jasmine 规范,如下所示:
self.positionDate = ko.computed(function () {
var dateString = "";
var start = moment(self.positionStartDate()).format("LL");
var end = moment(self.positionEndDate()).format("LL");
if (start !== end) {
dateString = sprintf("%s - %s", start, end);
}
else {
dateString = sprintf("%s", start);
}
return dateString;
}).extend({ throttle: 1 });
使用 throttle ,positionDate 计算函数不会更新。我尝试过人为等待以及调用 valueHasMutated() 均无济于事。
有人成功地编写了有关节流计算的规范吗?
最佳答案
由于使用了throttle
,您使可观察的“异步”,因此您需要使用 asynchronous specs features在《 Jasmine 》中。
因此,您需要使用 runs
和 waits
函数,如下所示:
describe('throttled obserable', function () {
it('positionDate should be changed after positionStartDate changed',
function () {
var vm = new ViewModel();
runs(function () {
vm.positionStartDate('January 21 2013');
vm.positionEndDate('January 22 2013');
});
waits(1);
runs(function () {
expect(vm.positionDate())
.toEqual('January 21 2013 - January 22 2013');
vm.positionStartDate('January 20 2013');
});
waits(1);
runs(function () {
expect(vm.positionDate())
.toEqual('January 20 2013 - January 22 2013');
});
});
});
演示 JSFiddle .
关于javascript - 节流计算属性的 Jasmine 规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14446024/