假设这是我的视图模型
function VM()
{
var self = this;
this.Status = ko.observable(false);
this.A = ko.observable();
this.B = ko.computed(
function()
{
return self.A();
}
).extend( throttle: 200 );
this.B.subscribe(
function()
{
self.Status(true);
setTimeout( //ajax simulation
function(){
self.Status(false);
}
,200)
}
);
}
我想要一个测试来验证状态在true和false之间切换,因为A已设置但我无法通过VM的双异步性质。有没有办法用多个stop()/ start()调用来测试它?
答案 0 :(得分:5)
如果您只测试Status
在true
和false
之间切换的内容,我只会订阅Status
更改并检查更改回调我获得值true
,第二次获得值false
。
以这种方式编写测试,你需要有一个启动/停止对,如下所示:
asyncTest("computed with ajax", function () {
expect(2); // expecting two asserts, so the Status only changes twice
var sut = new VM();
// multiple calls to A to test the throttle behavior
sut.A('something');
sut.A('something2');
sut.A('something3');
stop();
var callCount = 0;
var expectedValues = [true, false];
sut.Status.subscribe(function (value) {
start();
equal(sut.Status(), expectedValues[callCount]);
callCount++;
});
});