如何为检查响应的返回数据的http请求编写测试?

时间:2015-06-29 21:45:58

标签: node.js unit-testing http

我的AccountsApiHandler模块中有以下方法,我想编写一个测试,确认帐户是否正确返回。如果我从我的某个测试中调用此方法,我该如何检索帐户列表?

AccountsApiHandler.prototype.accounts = function (req, res) {
  var self = this

  /*
   *  Get list of accounts
   */

  if (req.method === 'GET') {
    return self.server.accounts.listAccountAsJson()
      .pipe(JSONStream.stringify())
      .pipe(res);
  }
};

这是我的测试,使用hammock npm模块生成我的模拟请求和响应对象。此测试假定现有帐户已在测试数据库中:     var test = require(' tape')     var hammock = require(' hammock')     var accountsApiHandler = require(' ../../ handlers / accounts-api')()

test('create initial accounts', function (t) {
  request = hammock.Request({
    method: 'GET',
    headers: {
      'content-type': 'application/json'
    },
    url: '/somewhere'
  })
  request.method = 'GET'
  request.end()

  response = hammock.Response()
  var accounts = accountsApiHandler.accounts(request, response)
  console.log("test.accountsApiHandler: accountsApiHandler.accounts: accounts", accounts) // `accounts` is undefined!

  var accountsList = []
  var actualAccounts = getAccountsFromDatabase() // the actual accounts from our db
  accounts
    .on('data', function (data) {
      accountsList.push(data)
    })
    .on('error', function (err) {
      t.fail(err)
    })
    .on('end', function () {
      console.log("results:", accountsList)
      t.equals(accountsList, actualAccounts)
    })

}

当我运行此测试时,我的accounts信息流为空,从而为我提供了一个accountsList帐户的空列表。有没有一种不错的方法从我的AccountsApiHandler.accounts方法获取帐户数据?

1 个答案:

答案 0 :(得分:0)

看起来我在上面的问题中的实现很接近,但不是像这样流式传输accounts

  accounts
    .on('data', function (data) {
      accountsList.push(data)
    })
    .on('error', function (err) {
      t.fail(err)
    })
    .on('end', function () {
      console.log("results:", accountsList)
      t.equals(accountsList, actualAccounts)
    })

}

我需要流式传输响应本身,它也没有data事件:

  accounts
    .on('end', function (err, data) {
      t.equals(data, actualAccounts)
    })

希望这有助于某人。更多文档位于hammock站点上的npm