3

我正在尝试通过使用在 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>

第一个规范通过了,我不确定为什么第二个没有。一旦我掌握了其中的一些,我相信它会让人感到第二天性。感谢您的任何帮助或建议!

4

2 回答 2

2

您可以使用spyOn

检查这个:

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

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

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

于 2015-03-20T15:23:27.057 回答
0

看看这个SO和这个博客文章

于 2012-01-07T10:44:29.740 回答