首先,这是工作要求。如果不能以这种方式完成,我需要一个很好的论据。
我必须使用 jasmine 和 sinon 来测试我们的骨干项目。我不知道如何在函数中模拟 jquery 调用。我有一个这样的函数(清理了一点以丢弃无关的调用):
Project.Views.FormView = Backbone.View.extend({
sidenavClicked: function(event){
var sidenav_id = $(event.target).attr('id').split('m')[1];
var sidenav_num = sidenav_id.split('m')[1];
var form_id = $('div.active form').attr('id');
var form_num = form_id.split('m')[1];
//code for fast scrolling
this.slideTo(form_num-1, sidenav_num-1);
return false;
},
...
});
现在我只是想测试一下 slideTo() 被称为这是我的茉莉花规格
describe("Form", function(){
describe("Carousel", function(){
it("should call slideTo when navbar is clicked", function(){
var spy = sinon.spy();
var formView = new Project.Views.FormView({ el : $('#main'), id : 1});
formView.bind('slideTo', spy);
var event = {};
event.target = "<div id='form1'></div>";
formView.sidenavClicked(event);
});
});
错误消息是: TypeError: form_id is undefined in file: .../src/main/webapp/js/views/FormView.js
据我所知,这是因为没有 jQuery 可以匹配的文档。我怎样才能让 form_id 有一个值?
实际的代码确实有效,并且确实做了它应该做的事情。
更新: html 看起来像这样:
<html>
<body>
<div id="main">
<ul id="carousel-navbar">
<li><a id="navlink-form1">Text</a></li>
...
</ul>
<div id="formCarousel" class=" carousel slide" >
<div class="active first item">
<form id="form1" name="question1">
...
</form>
</div>
...
</div>
</div>
</body>
</html>
澄清不完全像这样(实际是 442 行),但结构应该是相关的同义词。