1

我有一个基于 Backbone.Router 的 myRouter,它基于 URL 调用某些 set() 方法:

var MyRouter = Backbone.Router.extend({
  routes: {
    "doSomething/:value":                 "doSetterOnModel",   
  },

  doSetterOnModel: function(value) {
    // does some set(value) calls on my Model
  },
});

我现在想测试是否使用 QUnit 测试正确更新了模型(set()):

test( "update Model via URL change", function() {
      var value = "newValue";
      var url = "http://localhost/#/doSomething/" + value;

      //does not work as it moves page away from QUnit's tests.html page      
      window.location = url;

      // does also not work because it moves away from QUnit's tests.html page
      myRouter.navigate(url);

      deepEqual( myModel.get(key), value, "Value on Model was not updated by URL change");          
});

如何在 Qunit 中设置 URL 以测试我的路由器是否对某个 URL 执行正确的操作?

4

1 回答 1

3

当我想测试我的路由器时,我通常完全绕过文档导航并简单地调用Backbone.history.loadUrl,它负责将 URL 片段与路由器方法匹配:

Backbone.history.loadUrl("#/doSomething");

这里的额外好处是您不需要调用Backbone.history.start您的测试代码。还要注意使用或相对 url。http://localhost不需要指定零件。

小演示在这里。

于 2013-02-11T15:39:56.680 回答