簡體   English   中英

在 ember-cli-mirage 中引入瞬時延遲

[英]Introduce momentary delays in ember-cli-mirage

我正在使用 ember-cli-mirage 進行驗收測試。 對於特定情況,我想在通過慢速連接獲取數據時檢查行為。

ember-cli-mirage 中有一個設置,稱為timing ,用於模擬響應中的延遲。 但是,此設置不能在特定測試中更改為不同:

// app/mirage/config.js
this.timing = 400;

我嘗試過的其他事情是在假端點返回承諾。 通過一些導入/導出,我可以從我的測試中控制承諾的分辨率。 不幸的是,ember-cli-mirage 似乎沒有將返回值識別為承諾,而只是將其逐字傳遞回適配器:

// app/mirage/config.js
this.get('/StopPoint/Search/:term', (db, request) => {
  return freezer.run(function() {
    return db[`stop-point-search-${request.params.term}`][0];
  });
});

// At my test
freezer.on()
runTests()
freezer.off()

問題:有沒有辦法做到這一點? 即:控制 ember-cli-mirage 中特定響應的延遲?

一些想法:

  • 您可以通過server.timing更改特定測試中的時間。 應該為每個測試重新實例化服務器,這樣就不會影響其他測試。

     test('for slow behavior', function() { server.timing = 400; // });
  • 您還可以在測試中重新定義路由處理程序,如驗收測試指南的第二個示例中所示。 如果您使用0.2.0-beta ,路由處理程序有一個timing選項,您可以使用它來影響該處理程序:

     test('for slow behavior', function() { server.get('/slow-query', (schema, request) => { // return data; }, {timing: 400}; visit('/'); // assert(); });

我認為你本能地返回你可以控制凍結的東西將是測試這個的理想方式,與諸如Timecop 之類的東西一起 也許 Mirage 最終可以為此添加一個 API。

我們必須使用 mirage 測試我們的<progress>元素是否在測試中顯示,並發現使render方法同步並搭載waitForsettled效果最佳(並且根本不需要設置this.server.timing ):

const SELECTORS = {
    LOADING_SPINNER: '[role="progressbar"]'
};

test('it displays loading spinner when fetching blog post', async function(assert) {
    this.blogId = 1;
    render(hbs`<BlogPost @blogId={{this.blogId}}/>`); // NOTE: no await
    await waitFor(SELECTORS.LOADING_SPINNER);
    assert.dom(SELECTORS.LOADING_SPINNER).exists({ count: 1 }, 'loading spinner rendered while blog post loads');
    await settled();
    assert.dom(SELECTORS.LOADING_SPINNER).doesNotExist('loading spinner removed when blog post loaded');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM