2013-02-11 147 views
1

我有一个基于Backbone.Router myRouter,调用某一组()方法,基于URL:在Backbone.Router设置网址QUnit测试

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

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

我想现在如果与模型试验被更新(集())正确使用QUnit测试:

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");   
}); 

我怎么能为了测试,如果我的路由器进行一定URL正确的行动设定网址Qunit?

回答

3

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

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

这里的另一个好处是,你不在测试代​​码中不需要拨打Backbone.history.start。请注意使用或相对的网址。没有必要指定http://localhost部分。

Tiny demo here.

+0

谢谢你,你救了我。 :) – droope 2013-02-13 01:18:22