Я следил за этим question, чтобы проверить маршрутизатор. Мой маршрутизатор очень прост:Тестирование магистрального маршрутизатора с жасмином и синоном. Нельзя вызвать pushState.
App.Router = Backbone.Router.extend({
routes:{
"": "index",
"help": "help"
},
help: function() {/* not really needed */ },
index: function(){
// does something
}
});
И это apptempted перевод того, что должно быть испытанием с использованием жасмина с Синоном:
it('triggers the "index" route', function() {
var router = new App.Router();
Backbone.history.start();
//Not calling navigate it's a problem
router.navigate('help', {
trigger : true, replace: true
});
var index = sinon.spy(router, 'index');
var spyHasPS = sinon.spy(function(
data, title, url) {
expect(url).toEqual('/');
router.index();
});
var spyNoPS = sinon.spy(function(loc, frag) {
expect(frag).toEqual('');
router.index();
});
if (Backbone.history._hasPushState) {
pushStateSpy = sinon.stub(window.history, 'pushState', spyHasPS);
// window.history.pushState();
} else if (Backbone.history._wantsHashChange) {
pushStateSpy = sinon.stub(Backbone.history, '_updateHash', spyNoPS);
//Backbone.history._updateHash(window.location, '');
}
router.navigate('', {
trigger : true, replace: true
});
expect(pushStateSpy.called).toBe(true);
expect(index.called).toBe(true);
});
Этого тест работает, но я мог бы достичь, потому что я навигацию первых на "Помогите". «помощь» была всего лишь тем, что я создал для прохождения теста, но исходный вопрос не делал этого и проходил. Я сделал что-то не так? Я также запустить свой тест, но ошибка, я получаю:
Expected spy _updateHash to have been called. Error: Expected spy
_updateHash to have been called.
at null.<anonymous> (/src/test/js/spec/wfcRouter.spec.js:65:32) Expected spy index to have been called.
Я считаю, что «проблема» в функции навигации. В определенный момент в navigate: function(fragment, options)
мы имеем этот контроль:
fragment = this.getFragment(fragment || '');
if (this.fragment === fragment) return;
Итак ... это имеет смысл проверить PushState когда есть только один маршрут (помните, я добавил «помощь» только, чтобы сделать этот тест пройти так что мне это не нужно)? Если это имеет смысл, как я могу достичь этого теста?