我正在用JavaScript编写一个类,该类发送对特定URL的HTTP请求。我正在尝试使用Mocha测试该类,但是由于某种原因,方法fetchUrl()返回undefined
。我似乎不知道为什么。我从一天前开始使用JavaScript进行文字编写,因此我仍在尝试学习并适应它。
fetchUrl () {
var request = require('request')
var res
request(this.url, function (error, response, body) {
console.log('error:', error) // Print the error if one occurred
if (response.statusCode !== 200) {
console.log('received status code other than 200 OK')
this.error = true
}
res = response
console.log('statusCode:', response && response.statusCode) // Print the response status code if a response was received
// console.log('body:', body) // Print the HTML for the requested url.
this.html = body
})
return res
}
describe('Test Http request to google.com', function () {
it('should return 200', function (done) {
assert.equal(httpCon.fetchUrl().statusCode, 200)
done()
})
})
答案 0 :(得分:0)
您应该使用Nock libray模拟HTTP请求。
const axios = require('axios');
module.exports = {
getUser(username) {
return axios
.get(`https://api.github.com/users/${username}`)
.then(res => res.data)
.catch(error => console.log(error));
}
};
这里是测试案例:
describe('Get User tests', () => {
beforeEach(() => {
nock('https://api.github.com')
.get('/users/octocat')
.reply(200, response);
});
});
有关更多详细信息,您可以查看以下内容:mocking-http还将调查this的答案。 source
答案 1 :(得分:-3)
我认为您应该只在回调内部返回res,否则由于程序继续运行,它将返回undefined ... https://developer.mozilla.org/en-US/docs/Glossary/Callback_function 您可能想看看回调函数