Ember测试:您已打开测试模式,该模式禁用了运行循环的自动运行

Jos*_*osi 6 integration-testing ember.js ember-testing ember-cli ember-qunit

我正在尝试编写一个简单的Ember集成测试,并继续获得令人沮丧的运行循环错误,尽管使用Ember.run.我有一个噩梦,试图让这个工作,如果有人可以帮助我,我会非常感激.具体来说,我可以看到测试登录并开始加载下一页(应该如此),但是一旦测试完成,我就会收到该错误.这是关于第二次测试,第一次测试(因为我认为没有任何异步).

import Ember from 'ember';
import startApp from 'jobs-tuftsdaily/tests/helpers/start-app';
import exists from 'jobs-tuftsdaily/tests/helpers/start-app';

var App;

module('Integration - Landing Page', {
    setup: function() {
        App = startApp();
    },
    teardown: function() {
       Ember.run(App, 'destroy');
    }
});

test('Should load content', function() {
  visit('/').then(function() {
    ok(exists("*"), "Found HTML!");
    ok(exists('label:eq(4)'), "Slug label on page");
  });
});

test('Should sign in test user', function() {
  Ember.run(function() {
    visit('/').andThen(function() {
      return fillIn("input[name=email]", "test@test.com");
    }).andThen(function() {
      return fillIn("input[type=password]", "password");
    }).andThen(function() {
      return click("button");
    }).andThen(function() {
      ok(1, "stupid test passed");
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

CON*_*GHT 5

我意识到我参加聚会迟到了,但无论如何:

在组件或应用程序代码中的某个位置(即不在测试代码中),您可能会监听 Ember 外部的某个事件(例如,通过 jQuery 的 DOM 事件或类似的事件),但在此期间尝试与其进行交互处理程序运行。这些处理程序函数必须包装在 中Ember.run.bind(),否则它们在测试期间不会有运行循环。Ember.run.bind()也会设定this在处理程序期间为您设置。

如果您不将事件回调包装在 中Ember.run.bind(),则在应用程序正常运行期间,代码可能仍会顺利运行,因为自动运行功能会发现运行循环要求较高(例如,如果您在Ember.run.schedule()处理程序期间安排使用某些内容)与在代码中 Ember 并为它们启动一个运行循环,但它在测试中被关闭。


Kub*_*iał 1

将测试包装起来Ember.run不会有帮助,因为您收到的错误不是因为测试代码而是因为应用程序的代码而发生的。在您的登录路径中,您必须执行一些异步请求(例如 AJAX 甚至setTimeout),并在其处理程序中执行一些 Ember API 执行(例如设置、转换等)。

如果您需要任何确切的帮助,您需要将代码发布到路由/控制器中。

我最近出版了一本关于 Run Loop 的电子书,包括自动运行机制,可以在这里下载