Как проверить, что методы jQuery (fadeOut, hide и т. Д.) Были вызваны с помощью Jasmine - PullRequest
3 голосов
/ 28 декабря 2011

Я пытаюсь очистить свой Javascript, используя те же методы TDD, которые работают для меня в Ruby, но переход к 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 ]

2 голосов
/ 20 марта 2015

Вы можете использовать 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();
  });
});
0 голосов
/ 07 января 2012

Взгляните на это SO и это сообщение в блоге

...