在从服务器获取内容之后,我尝试测试一些内容的呈现。我使用Vue Test Utils,但这与此无关。
在组件的created挂钩中,ajax调用是使用axios进行的。我注册了axios-mock-adapter响应并‘呈现’了组件,调用完成了,一切正常工作,但是我只能使用moxios库来等待请求完成。
it('displays metrics', (done) => {
this.mock.onGet('/pl/metrics').reply((config) => {
let value = 0
if (config.params.start == '2020-01-26') {
value = 80
}
if (config.params.start == '2020-01-28') {
value = 100
}
return [200, {
metrics: [
{
key: "i18n-key",
type: "count",
value: value
}
]
}]
})
.onAny().reply(404)
let wrapper = mount(Dashboard)
moxios.wait(function() {
let text = wrapper.text()
expect(text).toContain('80')
expect(text).toContain('100')
expect(text).toContain('+20')
done()
})
})是否有可能摆脱moxios,只使用axios-mock-adapter实现同样的目标?
发布于 2018-11-23 18:02:21
是的,您可以使用异步/等待实现自己的flushPromises方法:
const flushPromises = () => new Promise(resolve => setTimeout(resolve))
it('displays metrics', async () => {
this.mock.onGet('/pl/metrics').reply((config) => {
// ..
}).onAny().reply(404)
let wrapper = mount(Dashboard)
await flushPromises()
expect(text).toContain('80')
})或者使用done和setTimeout
it('displays metrics', (done) => {
this.mock.onGet('/pl/metrics').reply((config) => {
// ..
}).onAny().reply(404)
let wrapper = mount(Dashboard)
setTimeout(() => {
expect(text).toContain('80')
done()
})
})moxiois.wait就是setTimeout。这是因为setTimeout调度的任务总是在微任务队列(如承诺回调)被清空后运行。
https://stackoverflow.com/questions/53009324
复制相似问题