2017-01-18 30 views
1

試圖在灰燼運行驗收測試:灰燼驗收測試 - 異步副作用錯誤

test('successful login', (assert) => { 

    Ember.run(() => { 
    visit('/signin'); 
    fillIn('#email', '[email protected]'); 
    fillIn('#password', 'password'); 
    click(':submit'); 

    andThen(function() { 
     assert.equal(currentURL(), '/'); 
    }); 
    }); 
}); 

偶爾(貌似隨機)產生了錯誤:

「環球錯誤:錯誤:斷言失敗:您已經開啓測試模式,禁用運行循環的自動運行您需要包裝在一個運行的異步副作用的代碼......」

我能得到一個工作版本:

test('successful login', (assert) => { 
    const done = assert.async(); 

    Ember.run(() => { 
    visit('/signin').then(() => { 
     fillIn('#email', '[email protected]').then(() => { 
     fillIn('#password', 'keen').then(() => { 
      click(':submit').then(() => { 
      assert.equal(currentURL(), '/'); 
      done(); 
      }); 
     }); 
     }); 
    }); 
    }); 
}); 

但是,如果我包括第二測試利用相同的路由的(對於一個不成功的登錄),它們中的一個幾乎總是與上面列出的錯誤結束。

我想知道什麼我不理解關於運行循環,Ember.run,以及如何使用異步行爲來測試。任何幫助或指向一個良好的資源將不勝感激!

+0

你爲什麼要在包裝'Ember.run'一切嗎?這不是必需的,可能是你問題的原因。 – steveax

回答

0

the guide,你的代碼應該是這樣的:

test('successful login', (assert) => { 
    visit('/signin'); 
    fillIn('#email', '[email protected]'); 
    fillIn('#password', 'password'); 
    click(':submit'); 

    andThen(function() { 
    assert.equal(currentURL(), '/'); 
    }); 
}); 

你並不需要一個Ember.run添加到您的案件。

+0

刪除'Ember.run'給出了同樣的錯誤:'錯誤:斷言失敗:您打開了......' – lft93ryt

0

最常見的,當你正在做的事情(異步)在您的應用程序無法正常對包裹灰燼(由包裹我的意思是灰燼運行循環內執行),就會出現此問題。

最常見的原因

  1. 您連接的事件處理程序的DOM,直接或與jQuery不包裹在Ember.run()灰燼應用交互
  2. 你執行的XHR(異步)直接地或者與沒有纏繞在Ember.run(回調內的灰燼應用)

通用修復相互作用的jQuery

當您導致代碼執行,與runloop(XHR回調或事件處理程序)以外的應用程序進行交互纏上Ember.run代碼()。

活動:

Ember.$('div').on('mouseover',function() { 
    Ember.run(function() { 
     // Interaction with application 
    }); 
}); 

XHR /阿賈克斯:

Ember.$.ajax({ 
    success: function() { 
     Ember.run(function() { 
      // Interaction with application 
     }); 
    } 
}); 

最佳實踐

  1. 當與DOM事件工作:
  2. 當你想要做的AJAX/XHR使用燼阿賈克斯(https://github.com/ember-cli/ember-ajax