【发布时间】:2026-01-21 23:15:01
【问题描述】:
我有 node.js 组件名称 controller.js,它有一个使用带有选项的 axios 调用 api 服务的函数,它还具有用于错误处理的 catch 函数。我无法存根 axios 函数以便通过单元测试来覆盖它。
下面是controller.js 组件。
const axios = require('axios');
export.getData = function(req, res, next) {
try {
const options = {
method: 'GET',
headers: headers,
url,
params: queryParams
};
axios(options).then(function (response) {
res.json(response.data);
})
.catch(function (error) {
if (error && error.response) {
if (error.response.status === 401) {
res.status(500).send({ error: true, message: 'There seems to be an issue, please try after sometime' });
}
}
});
}
}
下面是我的controller.test.js
const chai = require('chai');
const assert = chai.assert;
const axios = require('axios');
const sinon = require('sinon');
const controller = require('../controllersr');
describe("controller API testing", () => {
it("should call getMarketId function and return status 200 on success", function (done) {
const req = { };
const res = { json: {greet: "hello"}, status: 200};
var mockStub = sinon.stub(axios, 'get').resolves(res);
controller.getData(req, res);
assert.equal(res.status, 200);
mockStub.restore();
done();
});
});
在这里,我无法对 axios 函数和 catch 函数进行存根以进行错误处理。 因此无法覆盖纽约市 axios 成功和 catch 函数的代码。 请帮忙..
【问题讨论】:
-
正确的 req = {} 对象在 controller.test.js 中发送
-
您的代码正在调用 axios() 但您的测试正在存根 axios.get...这是两个不同的东西。即使你的存根有效,它也是存根错误的方法
-
请提出任何解决方案来覆盖 axios(options) 方法及其在 NYC 代码覆盖中的捕获错误功能。
-
您可以在代码中使用
axios.get(url, {headers, params})而不是axios(options),它应该可以工作
标签: node.js unit-testing axios mocha.js sinon