gpt4 book ai didi

javascript - 如何将 Sinon.JS spy 函数指定为类定义的一部分?

转载 作者:行者123 更新时间:2023-11-30 05:51:29 25 4
gpt4 key购买 nike

我正在使用 Require.js 和 Backbone.Marionette 编写一个 Backbone.js 应用程序,并使用带有 Chai、Sinon 和 Sinon-Chai 的 Mocha 对其进行测试。我一直在使用 Jarrod Overson's Backbone Marionette with Require.JS TODO sample作为应用程序结构和Jim Newbery's posts on testing Backbone apps的引用作为单元测试的引用。

我的问题是尝试添加 Marionette ItemViewMarionette Application object .我认为测试是否添加了 ItemView 的最佳方法是观察要调用的 render() 方法。由于 Marionette 提供了默认的 render() 实现,我认为最好只为 onRender() 回调使用 Sinon spy 。

我用了Squire.JS为我的 ItemView 返回一个 stub 类,如下所示:

define(['Squire', 'backbone.marionette'], function(Squire, Marionette) {
describe('App', function() {

var testContext;

beforeEach(function(done) {
testContext = {};

testContext.injector = new Squire();

testContext.renderSpy = sinon.spy();

testContext.injector.mock('app/views/Header', function() {
var stub_template_html = "<div></div>";
var HeaderStub = Marionette.ItemView.extend({
template: function(serialized_model) {
return _.template(stub_template_html);
}
});
return HeaderStub;
});

testContext.injector.require(['app/app'], function(app) {
testContext.app = app;
done();
});
});

it ('Should add a Header view to the \'header\' region', function() {
testContext.app.start();
expect(testContext.renderSpy).to.be.called();
});

当我通过 Chrome 运行 Mocha 时,我得到了预期的错误:“expected spy to have been called at least once, but it was never called.”但是,如果我将 Sinon spy 函数指定为 onRender() 回调,如下所示

var HeaderStub = Marionette.ItemView.extend({
// ...
onRender: testContext.renderSpy
});

我收到一条错误消息,指出 called() 方法不是一个函数。

有没有办法将 Sinon spy 函数指定为类定义中的方法?或者,是否有更好的方法来测试此代码?我是 JavaScript 的新手,所以这可能是一个更普遍的问题,而不是特定于 Sinon 的问题。

感谢任何帮助。

最佳答案

我不确定你使用的是什么断言库,但要检查你用 sinon 监视的函数是否被调用,你必须检查 spy 的 called 属性。参见 http://sinonjs.org/docs/#spies

spy.called

true if the spy was called at least once

所以你的断言应该是这样的:

expect(testContext.renderSpy).to.be(true);

关于javascript - 如何将 Sinon.JS spy 函数指定为类定义的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14597169/

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