我尝试从服务器获取某些内容后对其进行测试。
我使用Vue Test Utils
,但这无关紧要。
在组件的created
挂钩中,使用axios
进行了ajax调用。我注册了axios-mock-adapter
响应并“渲染”了该组件,进行了调用,并且一切正常,但是我只需要使用moxios
lib来等待请求完成。
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
达到相同的目的?
答案 0 :(得分:3)
是的,您可以使用async / await实现自己的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
只需schedules a callback with setTimeout
。之所以可行,是因为setTimeout安排的任务始终在清空空任务队列之后运行,例如promise回调。