如何检查jQuery方法(fadeOut,hide等)是否已使用Jasmine调用

时间:2011-12-27 22:01:16

标签: jquery tdd jasmine jasmine-jquery

我正在尝试通过使用在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="[{&quot;value&quot;:35,&quot;label&quot;:&quot;Accountant&quot;,&quot;division&quot;:&quot;North&quot;,&quot;job_class&quot;:&quot;Headquarters&quot;}]"></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>

第一个规格通过,我不知道为什么第二个没有。一旦我得到了一些这些,我相信它会感觉到第二天性。感谢您提供任何帮助或建议!

2 个答案:

答案 0 :(得分:2)

您可以使用spyOn

检查一下:

&#13;
&#13;
it("fades out the element", function() {
  spyOn($.fn, 'fadeOut');
  fadeOutElem();
  expect($.fn.fadeOut).toHaveBeenCalled();
});
&#13;
&#13;
&#13;

你也可以使用这样的超时:

&#13;
&#13;
it("fades out the element", function(done) {
  fadeOutElem();
  setTimeout(300, function() {
    expect($(".position-details").css('display').toEqual('none');
    done();
  });
});
&#13;
&#13;
&#13;

答案 1 :(得分:0)

请查看此SO和此blog post