1

私のジャスミンテストスイートでは、ルーターを正しい状態にナビゲートしたいと思います。このようなもの:

   describe("The Router", function(){
        beforeEach(function(){
            router = App.Router.create();
            router.transitionTo('foo.bar');
        }
    });

しかし、そうするとCannot call method 'disconnectOutlet' of undefinedエラーが発生します。それは私が呼んでいるので起こります

     bar: Ember.Route.extend({      
        connectOutlets: function(router, context){
          router.get('applicationController').connectOutlet('bla', 'blub');
        }
      }),

このルーター移行時。私はどういうわけか私のapplicationControllerを次のように初期化しようとしました

applicationController = App.ApplicationController.create();

ただし、エラーは変わりません。では、どうすれば正しいルーター状態になるようにモックできますか?

4

1 に答える 1

1

今日ジャスミンでこれをどのようにテストしていますか? 変更するたびにブラウズしますか、それとも jasmine-phantom-node / jasmine-node のようなコマンド ラインから実行しようとしますか?

1 つの例を以下に示します。以下のセットアップではビューをテストしていますが、上記のルーターの例にも同じモック/スパイのアイデアが適用されます。

require('static/script/vendor/filtersortpage.js');
require('static/script/app/person.js');

describe ("PersonApp.PersonView Tests", function(){

  var sut, router, controller;

  beforeEach(function(){
    sut = PersonApp.PersonView.create();
    router = new Object({send:function(){}});
    controller = PersonApp.PersonController.create({});
    controller.set("target", router);
    sut.set("controller", controller);
  });

  it ("does not invoke send on router when username does not exist", function(){
    var event = {'context': {'username':'', 'set': function(){}}};
    var sendSpy = spyOn(router, 'send');
    sut.addPerson(event);
    expect(sendSpy).not.toHaveBeenCalledWith('addPerson', jasmine.any(String));
  });

  it ("invokes send on router with username when exists", function(){
    var event = {'context': {'username':'foo', 'set': function(){}}};
    var sendSpy = spyOn(router, 'send');
    sut.addPerson(event);
    expect(sendSpy).toHaveBeenCalledWith('addPerson', 'foo');
  });

  it ("does not invoke set context when username does not exist", function(){
    var event = {'context': {'username':'', 'set': function(){}}};
    var setSpy = spyOn(event.context, 'set');
    sut.addPerson(event);
    expect(setSpy).not.toHaveBeenCalledWith('username', jasmine.any(String));
  });

  it ("invokes set context to empty string when username exists", function(){
    var event = {'context': {'username':'foo', 'set': function(){}}};
    var setSpy = spyOn(event.context, 'set');
    sut.addPerson(event);
    expect(setSpy).toHaveBeenCalledWith('username', '');
  });
});

コンテキストで見たい場合は、実際のプロジェクトでの上記のジャスミン テストを次に示します。

これがテスト中のビューです(上記のジャスミンテストを理解するのに役立ちます)

PersonApp.PersonView = Ember.View.extend({
  templateName: 'person',
  addPerson: function(event) {
    var username = event.context.username;
    if (username) {
      this.get('controller.target').send('addPerson', username);
      event.context.set('username', '');
    }
  }
});
于 2012-12-04T15:18:22.623 に答える