从服务器获取某些内容后,我尝试测试它的渲染。
我用 Vue Test Utils
但这无关紧要。
在 created
使用 axios
进行 ajax 调用的组件的 Hook .我注册了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
实现相同的效果只要?
最佳答案
是的,您可以实现自己的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 回调)被清空后运行。
关于jasmine - 如何等待使用 axios-mock-adapter 完成请求,就像使用 moxios 一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53009324/