「変更時に router.navigate への正しいパスを提供する必要がある」バックボーンの selectbox ビューへのイベント変更のテストを行っています。これがシナリオです。ドロップダウンで値を選択すると、正しい URL にリダイレクトされます。
これがテストです (campaign.test.js):
it('should provide the correct path to router.navigate when changed', function() {
var routeName = 'test_campaign';
var routerSpy = sinon.spy(Insights.router, 'navigate');
this.view.$el.bind('change', function() {
expect(routerSpy).toHaveBeenCalledWith('campaign/' + routeName, true);
});
//create the option element holding the test value
this.view.$el.append($('<option value="' + routeName +'" selected="selected" />'));
this.view.$el.trigger('change');
routerSpy.restore();
});
これはモジュールです (campaign.js):
DropdownView: Backbone.View.extend({
tagName: 'select',
className: 'campaign-list',
events: {
'change' : 'navCampaign'
},
initialize: function() {
_.bindAll(this);
this.collection.on('reset', this.render);
this.collection.on('add', this.addCampaign);
//if no campaigns exist then add a dummy placeholder
if(this.collection.models.length === 0) {
this.$el.append('<option value="">No Campaigns</option>');
}
},
navCampaign: function() {
Insights.router.navigate();
},
addCampaign: function(campaign) {
//remove the No Campaigns placeholder when campaigns are added
var firstChild = this.$el.children(':first');
if(firstChild.attr('value') === '') {
firstChild.remove();
}
var view = new Insights.Campaign.DropdownItem({ model: campaign });
var item = view.render().el;
this.$el.append(item);
},
render: function() {
this.collection.each(this.addCampaign);
return this;
}
})
私のテストでは、新しい OPTION 要素を作成し、属性を選択して値を設定しました。
これを change イベントの currentTarget として渡し、trigger() に送信するにはどうすればよいですか?
または、これを行う簡単な方法はありますか?
私はこのテストに失敗しました。エラー: 関数が「campaign/test_campaign」で呼び出されたと予想されます。true。