2013-11-22 3 views
2

Я пытаюсь написать асинхронный тест, который я никогда не делал раньше. В английском тесте говорит, что это:Простой тест Async Jasmine с перевернутыми ожиданиями

  • создать объект таймера с обратным вызовом
  • если таймер был быть запущен, он бы вызвать после 500мса
  • таймер не должен быть запущен
  • подтвердите, что обратный вызов не вызван ожиданием 1000 мс и проверкой, было ли оно вызвано

Итак, прочитав документы и посмотрев на другой код, я думаю, что так я должен его написать.

it("should create a timer not start", function (done) { 
    var fail = false, timer; 

    // if this test is passing, this should do nothing 
    runs(function(){ 
     timer = new Timer(function() { 
      fail = true; 
      timer.pause(); 
     }, 500); 
    }); 

    // if this test is passing, fail should never be true 
    waitsFor(function(){ 
     return fail; 
    }, 1000); 

    // this should be called after 1 second because the previous times out 
    runs(function(){ 
     expect(fail).toBeFalsy(); 
    }); 
}); 

Тем не менее, ожидания ждут, потому что отказ никогда не будет правдой. Мне нужно ждать. Для ожидания полной секунды, а затем оператор ожидания может работать, но мне нужен тайм-аут, чтобы быть хорошим, а не сбоем (который Жасмин сообщает об этом как).

Как это сделать с помощью Жасмина?

+0

Пожалуйста, отметьте правильный ответ, если он был опубликован или комментировать. – bnieland

ответ

1

Редактировать 2017-07-24
на основе @ комментарий Yavin5, этот ответ справедлив для Жасмин v1.

Для обновления до Jasmine v2 обратитесь к документации. https://jasmine.github.io/2.0/upgrading.html#section-9

Для Жасмин V2 Documentation визита https://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support

Вам нужно добавить флаг, который станет истинным, когда операция асинхронной завершена. Вот что ждет waitsFor. Я бы предложил что-то вроде

it("should create a timer not start", function (done) { 
    var fail = false, timer, flag; 

    // if this test is passing, this should do nothing 
    runs(function(){ 
     flag = false; 
     timer = new Timer(function() { 
      fail = true; 
      timer.pause(); 
     }, 500); 
     setTimeout(function() { 
     flag = true; 
     }, 1000); 
    }); 

    // if this test is passing, fail should never be true 
    waitsFor(function(){ 
     return flag; 
    }, 1100); 

    // this should be called after 1 second because the previous times out 
    runs(function(){ 
     expect(fail).toBeFalsy(); 
    }); 
}); 
+0

Просто, чтобы люди знали, это теперь устарело и устарело от Jasmine 2.0.0, по-видимому (и не работает, когда я пытаюсь использовать Jasmine 2.6.0). – Yavin5

Смежные вопросы