无法使用Backbone.history.start()和QUnit调用未定义错误的方法'start'

时间:2012-02-23 16:24:07

标签: javascript unit-testing testing backbone.js qunit

我目前正在为我的backbone.js应用程序编写单元测试,我在使用QUnit测试骨干路径时遇到了一些问题。

不幸的是,我在尝试运行测试时遇到以下错误。当我创建一个Backbone路由器实例时,它似乎在QUnit模块设置上:

Cannot call method 'start' of undefined

这是我的测试模块设置代码(在文档就绪时调用):

var router;

module("Test Router", {
    setup: function () {
        router = new TestRouter();
    },
    teardown: function () {
        router = null;
    }
});

这是我路由器的代码:

var TestRouter = Backbone.Router.extend({

initialize: function () {
    Backbone.history.start();
},

routes: {
    "!/test-view": "testView",
            "!/test-view-two": "testViewTwo",
    "*actions": "testView"
},

testView: function () {
    //view code here
},

    testViewTwo: function () {
    //view code here
}

});

有没有人对我做错了什么有任何想法?代码在QUnit测试之外按预期工作。

1 个答案:

答案 0 :(得分:1)

当您调用Backbone.history.start()并且它不是设计用于路由器的构造函数内时,会跟踪Url Hash修改更改。请将您的代码更改为以下内容并尝试

var router;
module("Test Router", {
    setup: function () {
        router = new TestRouter();
        Backbone.history.start(); 
    },
    teardown: function () {
        router = null;
    }
});

路由器

var TestRouter = Backbone.Router.extend({
initialize: function () {
},
routes: {
    "!/test-view": "testView",
            "!/test-view-two": "testViewTwo",
    "*actions": "testView"
},

testView: function () {
    //view code here
},
testViewTwo: function () {
    //view code here
}
});