function resolveManualPretenderRequests(pretender) {
pretender.requestReferences.forEach((ref) => {
if (pretender.requiresManualResolution(ref.request.method, ref.request.url)) {
pretender.resolve(ref.request);
}
});
}
然后,您可以使用mirage注册一个手动请求处理程序
server.get('/models:id', { timing: true });
因此在一个示例测试中,您可以使用ember测试助手waitFor()来执行类似于
test('button is disabled while loading', async function(assert) {
assert.expect(2);
// passing true to timing tells the underlying pretender handler wait for the request to be manually processed
server.get('/models/:id', { timing: true });
// await render will wait for promises to settle, but we actually don't want that
const renderPromise = render(hbs`<MyComponent />`);
// the waitFor() helper instead will allow us to just wait for our button to render
await waitFor('button');
const button = this.element.querySelector('button');
// since the request has not resolved yet, the button is disabled
assert.strictEqual(button.disabled, true);
// then we manually resolve the request
resolveManualPretenderRequests(server.pretender);
// now we can await the render so that we get our updated button state
await renderPromise;
// with the request resolved, now the button is no longer disabled
assert.strictEqual(button.disabled, false);
});
3条答案
按热度按时间ozxc1zmp1#
http://www.ember-cli-mirage.com/docs/v0.3.x/route-handlers/
您可以在测试中加入如下的行程常式:
1l5u6lss2#
如果我没理解错的话,您是在尝试测试页面上的一种情况(接受测试),即数据已发送到服务器,但响应仍然没有到达。
可以在测试中访问 server 示例,因此创建自己的方法来暂停/恢复响应并不复杂,但更简单的选项(我也使用)是使用 timing 选项(http://www.ember-cli-mirage.com/docs/v0.3.x/configuration/#timing)延迟来自mirage的响应。然后,当您在 andThen() 之前进行测试时,您应该处于希望测试的情况下。
qc6wkl3g3#
您可以访问底层的伪装者示例,并且事实上Mirage只是将timing参数直接传递给伪装者请求。https://github.com/pretenderjs/pretender#timing-parameter
不幸的是,pretender没有
requestReferences
和requiresManualResolution(verb, path)
的文档,但是这个帮助函数将处理所有未完成的手动请求然后,您可以使用mirage注册一个手动请求处理程序
因此在一个示例测试中,您可以使用ember测试助手waitFor()来执行类似于