2

我正在尝试使用 jasmine 和 guard 为我的 rails 3.2 应用程序测试基于 ember 的前端。为此,我使用 jasminerice 和guard-jasmine,phantomjs。设置非常简单,我可以运行一些示例规范。当谈到玩 ember 时,事情变得很疯狂。我有下面的规范来测试视频阅读器类。调用 loadVideo 方法时,应该将 videoHeight 和 videoWitdh 属性设置为对应的视频 DOM 元素的值。当我在浏览器上运行 jasmine 时,测试通过了,但是当我使用 guard 和 phantomjs 运行它时,它失败了。我得到“期望未定义等于 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);

我的规范写对了吗?

4

1 回答 1

3

您应该阅读有关Ember.js中的测试的博客文章。

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


以下讨论的摘要:

  • 如果要测试的代码与 DOM 交互,请将其包装在Ember.run调用中。
  • 如果您想测试代码中触发的事件并且您无法控制它们何时触发,请使用测试框架中的异步测试功能,例如 QUnit 的asyncTest
于 2012-04-06T20:59:17.743 回答