详解Jest结合Vue-test-utils使用的初步实践(14)
如果没有使用MockJS,那么都需要我们提供数据,就需要在afterEach中提供mounted时需要的数据:
beforeEach(() = > { jest.restoreAllMocks(); const mockResult = [{ name: 1}, {name: 2}]; helper.forData = jest.fn(() = > (Promise.resolve(mockResult))); wrapper = shallow(Test7); });
这样处理过后,运行用例通过,并且控制台也不会报错了。
如果是在同一个方法中遇到了需要不同返回结果的forData,比如下面的getQuestion方法:
async getQuestion() { const r1 = await forData(axios.get('result1.do')); const r2 = await forData(axios.get('result2.do')); const res = r1 + r2; switch (res) { case 2: { this.result = '222'; break } case 3: { this.result = '333'; break } } },
通过forData发出了两个不同的HTTP请求,返回结果不同,这时我们在测试时就需要使用mockImplementationOnce方法,这个方法mock的函数只被调用一次,多次调用时就会根据定义时的顺序依次调用mock函数,所以测试用例如下:
it('test for getQuestion', async() = > { // 设定forData返回值 const mockFn = jest.fn() .mockImplementationOnce(() = > (Promise.resolve(1))) .mockImplementationOnce(() = > (Promise.resolve(2))); helper.forData = mockFn; // 执行 await wrapper.vm.getQuestion(); // 断言 expect(mockFn).toHaveBeenCalledTimes(2); expect(wrapper.vm.result).toBe('333') });
测试用例通过,并且控制台无报错。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持黑区网络。