无头测试Ember应用与护卫和茉莉

时间:2012-04-06 20:06:56

标签: ember.js jasmine phantomjs

我正在尝试使用jasmine和guard来测试我的rails 3.2应用程序的基于余烬的前端。为此,我使用jasminerice和guard-jasmine,phantomjs。设置非常简单,我可以运行一些示例规格。当谈到使用余烬时,事情就变得疯狂了。我有下面的规范测试视频阅读器类。在调用loadVideo方法时,它应该使用相应视频DOM元素的值设置videoHeight和videoWitdh属性。 当我在我的浏览器上运行jasmine时测试通过,但是当我用guard和phantomjs运行它时,它失败了。我得到“Expect undefined等于640”。在phantomjs上运行测试时,似乎我的DOM元素没有考虑在内。

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);

我的规范是否写得正确?

1 个答案:

答案 0 :(得分:3)

您应该阅读有关Testing in Ember.js

的博客文章

我不知道你的Topper.VideoReader是什么样的,但我猜你的问题与在DOM上操作某些东西有关,而不是让Ember.js有机会传播这些变化。在测试中,您应该包含与绑定交互的调用或在Ember.run(function(){...})调用中操作DOM,如测试中所示,例如child_views_test.js


以下讨论摘要:

  • 如果您要测试的代码与DOM进行交互,请将其包含在Ember.run调用中。
  • 如果要测试代码中触发的事件,并且在触发它们时无法控制,请使用测试框架中的异步测试功能,如QUnit的asyncTest