我目前正在开发一个Backbone.js应用程序,该应用程序使用Mocha,Chai和Sinon库进行测试。我正在努力编写以下测试代码:当用户点击按钮时,它应该将用户重定向到家。
以下是视图的外观:
events: {
'click #navigate-home': 'goHome'
},
initialize: function(options) {
this.router = options.router;
},
goHome: function(event) {
event.preventDefault();
this.router.navigate('home', { trigger: true });
}
以下是测试:
beforeEach(function() {
this.router = new Backbone.Router();
this.myView = new MyView({
router: this.router
});
this.myView.render();
});
afterEach(function() {
this.router = null;
this.myView = null;
});
it('redirects to home', sinon.test(function() {
var spy = sinon.spy();
this.router.on({
'home': spy
});
this.myView.$el.find('#navigate-home').trigger('click');
expect(spy.called).to.be.true;
}));
代码在浏览器上按预期工作,但我无法通过测试。我非常感谢任何帮助。
答案 0 :(得分:1)
基于我在Backbone和Unit Testing方面的经验,我认为这种测试是无效的测试用例。
您尝试测试的不是实际的代码,而是尝试为Backbone库添加测试用例。类似的测试用例实际上应该是您的自动化的一部分(阅读Selenium)。
我认为在你的案例中编写单元测试的正确方法是:
it('should redirect to home', sinon.test(function() {
var spy = sinon.spy();
this.router.on({
'home': spy
});
// This is the difference
this.myView.goHome({preventDefault: function() { } });
expect(spy.called).to.be.true;
});