在 ember-cli-mirage 中引入瞬时延迟
Introduce momentary delays in ember-cli-mirage
我正在使用 ember-cli-mirage 进行验收测试。对于特定情况,我想检查通过慢速连接获取数据时的行为。
ember-cli-mirage 中有一个名为 timing
的设置可以模拟响应延迟。但是,此设置不能在特定测试中更改为不同:
// app/mirage/config.js
this.timing = 400;
我尝试过的其他方法是 return在假端点承诺。通过一些 import/export,我可以控制测试中承诺的分辨率。不幸的是,ember-cli-mirage 似乎没有将 return 值识别为承诺,只是将其逐字传递回适配器:
// 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;
//
});
您还可以在测试中重新定义路由处理程序,如 the second example of the Acceptance testing guides 所示。如果您使用 0.2.0-beta
,路由处理程序有一个 timing
选项,您可以使用它来影响该处理程序:
test('for slow behavior', function() {
server.get('/slow-query', (schema, request) => {
//
return data;
}, {timing: 400};
visit('/');
//
assert();
});
我认为你的直觉 return 你可以控制冻结的东西是测试这个的理想方法,与 Timecop 等东西一起使用。也许 Mirage 最终可以为此添加一个 API。
我们必须测试我们的 <progress>
元素在使用 mirage 的测试中显示,并发现使 render
method syncronous and piggybacking off of waitFor
and settled
效果最好(并且根本不需要设置 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');
});
我正在使用 ember-cli-mirage 进行验收测试。对于特定情况,我想检查通过慢速连接获取数据时的行为。
ember-cli-mirage 中有一个名为 timing
的设置可以模拟响应延迟。但是,此设置不能在特定测试中更改为不同:
// app/mirage/config.js
this.timing = 400;
我尝试过的其他方法是 return在假端点承诺。通过一些 import/export,我可以控制测试中承诺的分辨率。不幸的是,ember-cli-mirage 似乎没有将 return 值识别为承诺,只是将其逐字传递回适配器:
// 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; // });
您还可以在测试中重新定义路由处理程序,如 the second example of the Acceptance testing guides 所示。如果您使用
0.2.0-beta
,路由处理程序有一个timing
选项,您可以使用它来影响该处理程序:test('for slow behavior', function() { server.get('/slow-query', (schema, request) => { // return data; }, {timing: 400}; visit('/'); // assert(); });
我认为你的直觉 return 你可以控制冻结的东西是测试这个的理想方法,与 Timecop 等东西一起使用。也许 Mirage 最终可以为此添加一个 API。
我们必须测试我们的 <progress>
元素在使用 mirage 的测试中显示,并发现使 render
method syncronous and piggybacking off of waitFor
and settled
效果最好(并且根本不需要设置 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');
});