我正在尝试在Mocha中测试节点API,但没有收到在浏览器中正常运行的API请求的响应。
这是浏览器中的响应:
浏览器中的响应: {“成功”:true}
这是不起作用的API测试:
var request = require("request");
var expect = require("chai").expect;
describe("API TEST", function(){
it("Should return true", function(done){
request.get({ url: "https://skilltree.benis.hu/apitest" },
function(error, response, body) {
console.log(response);
done();
});
});
});
结果:
API TEST->未定义(响应=未定义)
但是测试语法似乎不错,因为它可以与公共API一起使用:
describe("API TEST", function(){
it("Should return true", function(done){
request.get({ url: "https://anapioficeandfire.com/api/characters/583" },
function(error, response, body) {
console.log(response);
done();
});
});
});
结果: 结果是一堆响应数据。
试图在POSTMAN中进行测试,可能找到了问题,不确定:无法得到答复。
可能的解决方案:
关闭ssl证书验证<-做到了这一点 在邮递员中关闭SSL证书验证,并且可以正常工作:
响应与浏览器中的响应相同: {“ succes”:true}
为了测试,我也试图找到一种在代码中禁用它的方法,但是我没有运气。这几乎是我第一次测试任何东西。
答案 0 :(得分:0)
您的假设是正确的,因为它是与证书验证有关的问题。我相信这应该可行:
it.only("Should return true", function(done){
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
request.get({ url: "https://skilltree.benis.hu/apitest" },
function(error, response) {
console.log(response.body);
done();
});
});
运行它时,我得到{"succes":true}
。
请注意,这仅是出于演示目的,process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
不应作为每个测试的一部分,而应在更高级别进行定义,以使其仅运行一次。