Node.js Jest/Node Axios测试抛出错误
在使用lambda/node代码运行Jest测试时遇到问题。当我运行index.js时,Axios get工作正常 这是我的index.jsNode.js Jest/Node Axios测试抛出错误,node.js,jestjs,axios,axios-mock-adapter,Node.js,Jestjs,Axios,Axios Mock Adapter,在使用lambda/node代码运行Jest测试时遇到问题。当我运行index.js时,Axios get工作正常 这是我的index.js const sslRootCAs = require('ssl-root-cas/latest') const util = require('util') exports.handler = async function (event) { const axios = require('axios'); //const user =
const sslRootCAs = require('ssl-root-cas/latest')
const util = require('util')
exports.handler = async function (event) {
const axios = require('axios');
//const user = process.env.user;
//const pw = process.env.pw;
const user = '';
const pw = '';
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
return axios.get('https://url', {
auth: {username: user, password: pw}, rejectUnauthorized: false
})
.then(res => {
return {
statusCode: 200,
body: res.data
};
})
.catch(err => {
return {
statusCode: 500,
body: JSON.stringify(err)
};
});
}
这是我的index.test.js
const lambda = require("./index");
const axios = require("axios");
const mockAdapter = require("axios-mock-adapter");
// afterEach(() => {
// mockAxios.reset();
// });
it("test get - this will pass", async () => {
let mock = new mockAdapter(axios, {delayResponse: 1000});
mock.onGet().reply({
status: 200,
data: {
expand: 'schema,names',
startAt: 0,
maxResults: 50,
total: 2
}
});
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
var event = {Key: "12345"};
const result = await lambda.handler(event);
console.log(result);
expect(result).toMatchObject({ status: 200, body: "test" });
mock.reset();
});
我用index.test.js尝试了多种方法。我甚至停止了所有的嘲弄,正在测试get是否有效。事实并非如此。当我运行npm测试时,我得到“无法验证第一个证书”
当我执行node index.js时,代码不会抛出该错误。我怀疑jest有某种类型的内置错误处理程序,或者Axios
任何想法都很好
谢谢,
蒂姆我会从搬家开始
const axios = require('axios');
在函数调用之外。运行测试时,我怀疑发生了以下情况:
const result = await lambda.handler(event);
expect(result).toMatchObject({ status: 200, body: "test" });
对于代码中的其他位置,您可以通过将所有内容包装在try/catch中来处理调用函数中的响应代码设置,如下所示:
try {
const result = await lambda.handler(event);
res.json(result.body);
catch (e) {
res.status(500).send({error: e})
}
test.js
然后,您应该通过以下操作将模拟适配器连接到您创建的axios实例:
const lambda = require("./index");
const api = require("./api");
const mockAdapter = require("axios-mock-adapter");
it("test get - this will pass", async () => {
let mock = new mockAdapter(api, {delayResponse: 1000});
mock.onGet('/').reply({ // make sure to specify the route your're mocking
status: 200,
data: {
expand: 'schema,names',
startAt: 0,
maxResults: 50,
total: 2
}
});
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
var event = {Key: "12345"};
const result = await lambda.handler(event);
console.log(result);
expect(result).toMatchObject({ status: 200, body: "test" });
mock.reset();
});
感谢您的详细回答,非常感谢!!!!
try {
const result = await lambda.handler(event);
res.json(result.body);
catch (e) {
res.status(500).send({error: e})
}
const lambda = require("./index");
const api = require("./api");
const mockAdapter = require("axios-mock-adapter");
it("test get - this will pass", async () => {
let mock = new mockAdapter(api, {delayResponse: 1000});
mock.onGet('/').reply({ // make sure to specify the route your're mocking
status: 200,
data: {
expand: 'schema,names',
startAt: 0,
maxResults: 50,
total: 2
}
});
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
var event = {Key: "12345"};
const result = await lambda.handler(event);
console.log(result);
expect(result).toMatchObject({ status: 200, body: "test" });
mock.reset();
});