gpt4 book ai didi

javascript - 使用 Jasmine,如何使用 callFake() 和 done() 测试异步调用?

转载 作者:行者123 更新时间:2023-11-28 20:14:52 25 4
gpt4 key购买 nike

我正在使用 jasmine 的 new syntax (so no waits, or runs)用于测试异步操作,但遇到了麻烦。

我想做的是确保在模型触发 sync 事件时调用渲染函数。这个例子很简单,但展示了我遇到的核心问题。 This answer接近我的用例,但由于我没有 setTimeout 而最终有所不同。

我试过的是:

我的函数

postLoad : function() {
this.listenTo(this.model, 'sync', this.render);
},

我的测试

describe('postLoad', function () {

it('listens to model sync and calls render', function (done) {
//arrange
view = new App.View({ model: model });
view.initialize();
view.postLoad();

spyOn(view, 'render').and.callFake(function () {
done();
});

//act
view.model.trigger('sync');

//assert
expect(view.render.calls.count()).toBe(1);

});
});

以上似乎是合理的感觉 render 可能需要一段时间,但根据我目前对 done 的理解,规范在调用之前不会评估。我希望有人能来救援!既然我们在伪造渲染,它就不会被计入 spy 吗?

最佳答案

只要 this.view.model.trigger('sync'); 触发对 view.render 的调用,这 应该 我认为的工作。

describe('postLoad', function() {
beforeEach(function(done) {
this.view = new App.View({ model: model });
spyOn(this.view, 'render').and.callFake(done);
this.view.initialize();
this.view.postLoad();
this.view.model.trigger('sync');
});
it('listens to model sync and calls render', function() {
expect(this.view.render.calls.count()).toBe(1);
});
});

关于javascript - 使用 Jasmine,如何使用 callFake() 和 done() 测试异步调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29994396/

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