1

URLに基​​づいて特定のset()メソッドを呼び出すBackbone.RouterベースのmyRouterがあります。

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

ルーターが特定のURLに対して正しいアクションを実行するかどうかをテストするために、QunitでURLを設定するにはどうすればよいですか?

4

1 に答える 1

3

ルーターをテストしたいときは、通常、ドキュメントナビゲーションを完全にバイパスして、Backbone.history.loadUrlURLフラグメントをルーターメソッドに一致させる役割を担うを呼び出すだけです。

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

Backbone.history.startここでの追加の利点は、テストコードを呼び出す必要がないことです。使用法または相対URLにも注意してください。パーツを指定するhttp://localhost必要はありません。

ここに小さなデモがあります。

于 2013-02-11T15:39:56.680 に答える