问题描述
我正在尝试模拟来自 Detox 测试的 API 调用,但似乎没有任何效果。理论上,Nock 可以完全满足我的要求,但是当我使用 nock 调试运行测试时,它看不到我的应用程序发出的任何请求。我正在使用 axios 发出请求,并且尝试将 axios 实例上的适配器设置为 http 适配器。
关于如何让 nock 与 Detox 一起工作的任何建议,或者是否有另一个你已经成功的模拟库,谢谢!
解决方法
我最终做的是利用 Detox 文档中指定的模拟(一个单独的 *.e2e.js
文件在测试期间击中不同的端点)。您定义了这些仅在 e2e 期间运行的特殊文件,我已将我的文件设置为仅点击 localhost:9091
-- 然后我在该端口上运行一个 Express 服务器,为我需要的端点提供服务。
也许是一种丑陋的方法,希望得到建议!
我的模拟文件:
// src/helpers/axios.e2e.js
import axios from 'axios';
const instance = axios.create({
baseURL: `http://localhost:9091/api`,});
export default instance;
以下是我在测试期间运行快速服务器的方式:
// e2e/mytest.e2e.js
const express = require('express');
let server;
beforeAll(async () => {
const app = express();
app.post('/api/users/register/',(req,res) => {
res.status(400)
res.send({"email": ["Test error: Email is required!"]})
})
await new Promise(function(resolve) {
server = app.listen(9091,"127.0.0.1",function() {
console.log(` Running server on '${JSON.stringify(server.address())}'...`);
resolve();
});
});
})
afterAll(() => {
server.close()
})