使用 axios returns undefined 的 Sinon 存根

Stub of Sinon using axios returns undefined

我正在使用带有 axios 的 sinon 进行测试。

// index.js
{
    .. more code
    const result = await axios.get("http://save")
    const sum = result.data.sum
}

并且我通过sinon和supertest做了一个测试代码,用于e2e测试。

// index.test.js
describe('ADMINS GET API, METHOD: GET', () => {
  it('/admins', async () => {
    sandbox
      .stub(axios, 'get')
      .withArgs('http://save')
      .resolves({sum: 12});

    await supertest(app)
      .get('/admins')
      .expect(200)
      .then(async response => {
        expect(response.body.code).toBe(200);
      });
  });
});

但是当我测试它时,它给了我这个结果。

 // index.js
    {
        .. more code
        const result = await axios.get("http://save")
        const sum = result.data.sum 
        console.log(sum) // undefined
    }

我想我解决了回复。但它没有给出任何回应。 它只是在 supertest 上通过了 axios。
在这种情况下,我该如何 return 更正数据?
感谢您阅读。

解析后的值应该是{ data: { sum: 12 } }.

例如

index.js:

const express = require('express');
const axios = require('axios');
const app = express();

app.get('/admins', async (req, res) => {
  const result = await axios.get('http://save');
  const sum = result.data.sum;
  res.json({ code: 200, sum });
});

module.exports = { app };

index.test.js:

const supertest = require('supertest');
const axios = require('axios');
const sinon = require('sinon');
const { app } = require('./index');

describe('ADMINS GET API, METHOD: GET', () => {
  it('/admins', async () => {
    const sandbox = sinon.createSandbox();
    sandbox
      .stub(axios, 'get')
      .withArgs('http://save')
      .resolves({ data: { sum: 12 } });

    await supertest(app)
      .get('/admins')
      .expect(200)
      .then(async (response) => {
        sinon.assert.match(response.body.code, 200);
        sinon.assert.match(response.body.sum, 12);
      });
  });
});

测试结果:

  ADMINS GET API, METHOD: GET
    ✓ /admins


  1 passing (22ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 index.js |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------