等待来自nodejs中的POST请求的JSON响应数据(mocha测试)

时间:2015-08-24 21:28:20

标签: node.js http express mocha

我知道有几个与我有关的问题,但我没有找到任何有用的问题:

  • this one不适用于我的情况,我实际上得到答案,这是我无法得到的内容。
  • on this one,另一方面,问题是异步调用的错误处理,这不是我的情况
  • there,好吧,我真的不完全理解这个问题
  • 依旧......

然后,我认为这是一个合理的问题。我实际上是通过邮件请求在我的服务器中执行一些加密(在节点中快速路由):

app.post('/encrypt', encrypt);

加密正在做:

function encrypt(req,res) {
    if(req.body.key && req.body.message) {
        var encryptedMessage = Encrypter.encrypt(req.body.key,req.body.message);

        return res.status(200).json({ message: encryptedMessage });
     }

     res.status(409).json({ message: 'the message could not be encrypted, no key found' });
    }
}

所以,我通过console.log进行了测试,它正在运行。当服务器收到请求时,正在生成加密消息。

与此同时,我正在用摩卡测试我的东西,我这样做:

describe('# Here is where the fun starts ', function () {
  /**
   * Start and stop the server
   */
  before(function () {
    server.listen(port);
  });

  after(function () {
    server.close();
  });

  it('Requesting an encrypted message', function(done) {
    var postData = querystring.stringify({
      key : key,
      message : message
    });

    var options = {
      hostname: hostname,
      port: port,
      path: '/encrypt',
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': postData.length
      }
    };

    var req = http.request(options, function(res) {
      res.statusCode.should.equal(200);
      var encryptedMessage = res.message;
      encryptedMessage.should.not.equal(message);
      done();
    });

    req.on('error', function(e) {
      //I'm aware should.fail doesn't work like this
      should.fail('problem with request: ' + e.message);
    });

    req.write(postData);
    req.end();
  });
});

因此,每当我执行测试时,它都会失败并显示Uncaught TypeError: Cannot read property 'should' of undefined,因为res.message不存在。

没有res.on(数据,结束,事件正在运作,所以我想数据应该可以从那里获得。首先我有这个:

var req = http.request(options, function(res) {
  res.statusCode.should.equal(200);
  var encryptedMessage;

  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
    encryptedMessage = chunk.message;
  });

  encryptedMessage.should.not.equal(message);
  done();
});

但是从未访问过res.on(console.log没有显示任何内容)。因此我有点卡在这里。我肯定做了一些基本的错误,但我没有线索,我发现的许多问题似乎都不适用于我的情况。

很奇怪,如果我启动测试服务器然后我卷曲它     curl --data“key = secret& message = veryimportantstuffiabsolutellyneedtoprotect”localhost:2409 / encrypt

Curl justs等待ad aeternam。

0 个答案:

没有答案