gpt4 book ai didi

unit-testing - 如何使用 Qunit 对在可观察对象上使用节流的 Knockout View 模型进行单元测试

转载 作者:行者123 更新时间:2023-12-04 05:24:51 26 4
gpt4 key购买 nike

假设这是我的 View 模型

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

}

我想要一个测试来验证设置 A 时状态在 true 和 false 之间切换,但我无法通过 VM 的双重异步特性。有没有办法通过多次 stop()/start() 调用来测试它?

最佳答案

如果您只测试 Statustruefalse 之间切换,我会订阅 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++;
});
});

演示 JSFiddle.

关于unit-testing - 如何使用 Qunit 对在可观察对象上使用节流的 Knockout View 模型进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17303722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com