1

在我的 jasmine 测试套件中,我想将我的路由器导航到正确的状态。像这样的东西:

   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 之类的命令行运行它?

一个示例可能如下所示。在下面的设置中,我正在测试一个视图,但相同的模拟/间谍想法适用于您上面的路由器示例。

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 回答