0

我是测试、Jasmine 和 Javascript 的新手,也许这个问题是微不足道的。我必须用 Jasmine 测试一个功能:

define(["module", ...], function(Module, ...){
    //...
    action: function(){
        //...
        Backbone.history.navigate('companies', {trigger: true});
        //...
    }
}

测试看起来像这样:

describe("function action", function() {
    it ("calls Backbone.history.navigate()", function(){
        spyOn(module, "Backbone.history.navigate");
        module.action();
        expect(Backbone.history.navigate()).toHaveBeenCalled();
    });
});

但这不起作用。它说:

Error: Backbone.history.navigate() method does not exist

我必须做什么才能监视该方法?我已经尝试在运行该函数之前加载backbone.js 文件,但这并没有改变任何东西。

4

2 回答 2

3

你可以写

spyOn( Backbone.history, 'navigate' );

接着

expect( Backbone.history.navigate ).toHaveBeenCalled();

一个可能的缺点是,如果您曾经并行执行测试并且Backbone.history.navigate被一个测试监视并被另一个测试使用,那么您可能不会得到预期的结果。

于 2015-04-20T08:48:49.437 回答
0

您应该尝试以下

var backbone_historySpy=spyOn(Backbone,'history.navigate');
describe('testing function action:',function(){
it('expect Backbone.history.navigate() to be called',function(){
module.action();
expect(backbone_historySpy).toHaveBeenCalled();
});
});

它应该工作

于 2015-04-20T08:59:32.027 回答