使用 Detox 和 Nock 模拟 API 调用

Der*_*ier 5 nock react-native detox

我正在尝试模拟来自 Detox 测试的 API 调用,但似乎没有任何效果。理论上,诺克会完全满足我的要求,但是当我使用诺克调试运行测试时,它没有看到我的应用程序发出的任何请求。我正在使用 axios 发出请求,并且尝试将 axios 实例上的适配器设置为 http 适配器。

任何有关如何让 nock 与 Detox 一起工作的建议,或者是否有另一个您已经成功使用的模拟库,我们将不胜感激,谢谢!

Eri*_*ael 3

我最终所做的是利用 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;
Run Code Online (Sandbox Code Playgroud)

以下是我在测试期间运行 Express 服务器的方式:

// 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()
})
Run Code Online (Sandbox Code Playgroud)