使用 Detox 和 Nock 模拟 API 调用
Posted
技术标签:
【中文标题】使用 Detox 和 Nock 模拟 API 调用【英文标题】:Mocking API calls with Detox and Nock 【发布时间】:2021-05-31 11:42:30 【问题描述】:我正在尝试模拟来自 Detox 测试的 API 调用,但似乎没有任何效果。理论上,诺克会做我想要的,但是当我用诺克调试运行我的测试时,它没有看到我的应用程序发出的任何请求。我正在使用 axios 发出请求,并尝试将我的 axios 实例上的适配器设置为 http 适配器。
任何关于如何让 nock 与 Detox 一起工作的建议,或者如果有另一个你已经成功使用的模拟库,我们将不胜感激,谢谢!
【问题讨论】:
【参考方案1】:我最终做的是利用 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()
)
【讨论】:
以上是关于使用 Detox 和 Nock 模拟 API 调用的主要内容,如果未能解决你的问题,请参考以下文章
React API 测试与 Nock 失败并出现“错误:Nock:请求不匹配”