我正在尝试通过使用在Ruby中为我工作的相同TDD方法来清理我的Javascript,但是跳转到Jasmine已经让我失去了一条曲线。
举一个简单的例子,我想指定给定元素在点击时淡出:
$('.position-details').live 'click', ->
$this = $(this)
$this.fadeOut 'fast', ->
$this.closest('.fields').find('.position-search').fadeIn('fast').focus()
我的规格:
describe "Position picker", ->
beforeEach ->
loadFixtures("position_picker.html")
@details = $('.position-details')
@picker = $('.position-picker')
jasmine.Clock.useMock()
it "the position details are initially shown", ->
expect(@details).toBeVisible()
describe "when the position details are clicked", ->
it "fades out the position details", ->
@details.trigger('click')
jasmine.Clock.tick(1000)
expect(@details).not.toBeVisible()
我的装备:
<div id='position-data' data-positions="[{"value":35,"label":"Accountant","division":"North","job_class":"Headquarters"}]"></div>
<div class='position-details'>
<div class='position-name'></div>
<br />
</div>
<div class='position-picker'>
<label>Position<abbr title="required">*</abbr></label>
<span class="error" />
<input class="position-search" type="text" />
<div>
<input class="position_id" type="text" />
</div>
</div>
第一个规格通过,我不知道为什么第二个没有。一旦我得到了一些这些,我相信它会感觉到第二天性。感谢您提供任何帮助或建议!
答案 0 :(得分:2)
您可以使用spyOn
检查一下:
it("fades out the element", function() {
spyOn($.fn, 'fadeOut');
fadeOutElem();
expect($.fn.fadeOut).toHaveBeenCalled();
});
&#13;
你也可以使用这样的超时:
it("fades out the element", function(done) {
fadeOutElem();
setTimeout(300, function() {
expect($(".position-details").css('display').toEqual('none');
done();
});
});
&#13;
答案 1 :(得分:0)