我正在测试一个在挂载时异步加载数据的组件。组件按预期工作,只是测试出现了问题。组件的async loadData()
函数在await axios.get()
挂起,而jest测试运行程序在component.vm.$nextTick()中。结果,$nextTick循环中的检查从未通过。
在$nextTick循环超时后,组件的await语句立即完成,组件呈现自己。axios被模拟,所以它应该很快解析。如果我删除await并只填充一个常量,整个过程将按预期执行。
我猜$nextTick循环不是异步的,它正在消耗线程,尽管这是测试异步内容的推荐方法。问题是,我没有onclick异步处理程序等待:此方法从onMount调用。
不幸的是,我不知道如何创建一个jsFiddle,所以我希望这就足够了:
我的组件(相关部件)
export default {
data() { return { content: '' }; },
mounted() { this.loadDoc() }
methods: {
async loadDoc() {
const res = await axios.get('some url'); // <-- this is the line that hangs until timeout
// const res = { data: 'test data'}; // this would test just fine
this.content = res.data;
}
}
}
和我组件规范js:
jest.mock('axios', () => ({
get: async (url) => {
return { data: 'test data' };
}
};
describe('my super test', () => {
it('renders', (done) => {
const doc = shallowMount(myComponent);
doc.vm.$nextTick(() => {
expect(doc.html()).toContain('test data'); // <-- this never matches
done();
});
});
});
1条答案
按热度按时间4smxwvx51#
我会删除,但我只是花了相当多的时间在文件中建议的东西,但没有解释说,这是唯一的方法...我希望别人发现这有用。
使用
flush-promises
包而不是$nextTick循环立即“修复”了这个问题代码示例(上述代码的返工):