测试时出现Ember错误:您需要在运行中包装任何带有异步副作用的代码

Bal*_*ngh 5 javascript unit-testing ember.js ember-qunit

我们已经有一个应用程序正在努力为CI目的添加测试用例.

我们有一个小代码,用于尝试登录过程并检查可能的登录状态(如成功,失败,无效帐户帐户锁定等)后发生的情况.

所以我尝试了以下代码.

visit('/login')
    .fillIn('#identification', "testuser")
    .fillIn('#password', "testpass")
    .click('input[type="submit"]')
    andThen(function(){
        ok(!exists('button:contains(sign in)'), '3. Login button is not displayed when authenticated');
        ok(exists('.dropDownMenuOptions li:contains(Logout)'), '4. Logout button is displayed when authenticated');
    });
Run Code Online (Sandbox Code Playgroud)

它在控制台中给出以下错误.

ember.debug.js:5162 Uncaught Error: Assertion Failed: You have turned on testing mode, which disabled the run-loop's autorun. You will need to wrap any code with asynchronous side-effects in a run
Run Code Online (Sandbox Code Playgroud)

执行单击后会发生此错误.当点击使AJAX调用服务器及其响应时,进行路由转换.

对于成功登录的情况下,我想检查我的路线改为从/login/这我不能因为这个错误的事情.

请建议.

谢谢

Tor*_*ups 14

在处理表单提交的控制器/组件中,您必须执行一组(示例)

save: function() {
    this.get('model').set('name', 'foo');
}
Run Code Online (Sandbox Code Playgroud)

如果这个工作是在运行循环(async)中完成的,那么在一些ajax事件之后一定要把它包装好w/ember就像这样运行

save: function() {
    Ember.run(function() {
        this.get('model').set('name', 'foo');
    });
}
Run Code Online (Sandbox Code Playgroud)