2012-04-06 3 views
2

Я пытаюсь использовать жасмин и охрану для проверки интерфейса на основе ember для моего приложения 3.2 рельсов. Для этого я использую jasminerice и guard-jasmine, phantomjs. Настройка была очень простой и простой, и я могу запустить некоторые образцы спецификации. Когда дело доходит до игры с эмбером, все идет с ума. У меня есть спецификация ниже, которая тестирует класс видеопроигрывателя. Он должен установить свойство videoHeight и videoWitdh со значением соответствующего элемента DOM видео при вызове метода loadVideo. Когда я запускаю жасмин в своем браузере, тестовый проход, но когда я запускаю его с помощью guard и phantomjs, он терпит неудачу. Я получил «Ожидание неопределенного равным 640». Кажется, что мой элемент DOM не учитывается, когда тестовый запуск на phantomjs.Безголовое испытание Применение Ember с защитой и жасмином

describe "VideoReader", -> 
    it "loads video from video DOM element", -> 
    videoDOM = Ember.$("<video width='640' height='480'><source src='/test.mp4'></source></video>")[0]; 

    player = Topper.VideoReader.create(); 

    player.loadVideo(videoDOM); 

    videoHeight = player.get('videoHeight'); 
    videoWidth = player.get('videoWidth'); 

    expect(videoHeight).toEqual(480); 
    expect(videoWidth).toEqual(640); 

Является ли моя спецификация правильно написанной?

ответ

3

Вы должны прочитать сообщение в блоге о Testing in Ember.js.

Я не знаю, как выглядит ваш Topper.VideoReader, но я полагаю, что ваша проблема связана с манипулированием чем-то на DOM и не дает Ember.js шанс распространить эти изменения. В ваших тестах вы должны обернуть свои звонки, которые взаимодействуют со связями или манипулируют DOM в вызове Ember.run(function(){...}), как показано в тестах, например child_views_test.js.


Резюме от обсуждения ниже:

  • Если код, который вы хотите проверить, взаимодействует с DOM, заверните его в Ember.run вызова.
  • Если вы хотите проверить на события, которые обжигают в вашем коде, и вы не имеете контроля, когда именно они увольняются, использовать асинхронные функции тестирования в рамках тестирования, как asyncTest
+0

мой метод loadVideo QUnit в выглядит так: loadVideo: функция (видеоDOM) { это.set ('videoHeight', videoDOM.height); this.set ('videoWidth', videoDOM.width); }, – jrabary

+0

Вы пробовали обернуть свой вызов 'loadVideo' в' Ember.run (function() {player.loadVideo (videoDOM);}); '? – pangratz

+0

Спасибо за ссылку, это было полезно. – pjmorse