类方法返回未定义

时间:2018-07-12 13:28:53

标签: javascript node.js mocha chai node-request

我正在用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()
  })
})

2 个答案:

答案 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 您可能想看看回调函数