まず、これは仕事の要件です。この方法でできない場合は、適切な議論が必要です。
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行です)、構造は関連する場合は同義でなければなりません。