gpt4 book ai didi

javascript - 如何在 ember + jasmine 中模拟路由器状态

转载 作者:行者123 更新时间:2023-11-28 02:34:10 25 4
gpt4 key购买 nike

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

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

但如果我这样做,我会收到无法调用未定义的方法“disconnectOutlet”错误。发生这种情况是因为我正在打电话

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

在此路由器转换处。我尝试以某种方式初始化我的 applicationController 就像

applicationController = App.ApplicationController.create();

但它并没有改变错误。那么我怎样才能模拟处于正确的路由器状态呢?

最佳答案

你今天如何用 Jasmine 测试这个?您是要浏览每个更改还是尝试使用 jasmine-phantom-node/jasmine-node 之类的东西从命令行运行它?

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

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', '');
});
});

Here如果您想在一些上下文中查看它,上面的 Jasmine 测试是在真实项目中进行的

这是正在测试的 View (以帮助理解上述 Jasmine 测试)

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', '');
}
}
});

关于javascript - 如何在 ember + jasmine 中模拟路由器状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com