如何在 Backbone 视图上测试 route.navigate
How To Test route.navigate on Backbone View
我目前正在开发一个 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;
}));
代码在浏览器上按预期工作,但我无法通过测试。如果有任何帮助,我将不胜感激。
基于我在Backbone和单元测试方面的有限经验,我认为这种测试是无效的测试用例。
您尝试在实际上不是您的代码中测试的内容,而是您尝试为 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;
});
我目前正在开发一个 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;
}));
代码在浏览器上按预期工作,但我无法通过测试。如果有任何帮助,我将不胜感激。
基于我在Backbone和单元测试方面的有限经验,我认为这种测试是无效的测试用例。
您尝试在实际上不是您的代码中测试的内容,而是您尝试为 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;
});