【发布时间】:2020-07-18 19:46:19
【问题描述】:
我有 Stencil 组件,它使用 axios.get 从服务器获取一些数据(例如开发期间的 localhost:3000)。现在我有一个 e2e.ts 测试,它与其他几个组件一起测试这个组件。我想模拟 axios.get 函数以将我的测试与服务器隔离。在 spec.ts 测试中,我会使用 jest 和以下代码来模拟 axios:
import axios from 'axios';
import {myComponent} from './my-component';
const mock = jest.spyOn(axios, 'get');
test('get data', async () => {
...
mock.mockResolvedValue('hello');
...
});
但这在 e2e 测试中不起作用。我已经尝试安装 jest-puppeteer,但我找不到任何示例说明如何使用 jest-puppeteer 使用 jest mocking API 来模拟函数。
任何示例代码将不胜感激。
附:注意:如果我使用 Puppeteer 拦截请求并响应它,我会收到“请求已处理”错误。下面是示例代码:
const page = await newE2EPage();
await page.setRequestInterception(true);
page.on('request', req => {
if(req.url() === 'http://localhost:3000/') {
request.respond({
contentType: 'text/plain',
headers: {'Access-Control-Allow-Origin': '*'},
body: 'hello'
})
}
else {
request.continue({});
}
});
await page.setContent('<my-component></my-component>');
【问题讨论】:
标签: mocking jestjs puppeteer e2e-testing stenciljs