【发布时间】:2014-11-14 09:36:23
【问题描述】:
这是一个关于在 Sails JS 中使用 Mocha 进行异步测试的问题。
我正在使用 supertest 库在 Sails JS 中编写控制器测试。我想检查一个方法是否在 HTTP POST 上被调用到我们的控制器。为此,我对该方法进行存根,并希望在end() 中调用它,如下所示:
request(sails.hooks.http.app)
.post('heartbeat/create')
.send('device: 1')
.end(function(err, res) {
expect(publishCreateStub.called).to.be.true;
done();
});
当我运行它时,期望失败,因为断言时没有调用该方法。但是当我将期望放在setTimeout 中时,它会起作用:
request(sails.hooks.http.app)
.post('heartbeat/create')
.send('device: 1')
.end(function(err, res) {
setTimeOut(function() {
expect(publishCreateStub.called).to.be.true;
done();
}, 1000);
});
如果没有setTimeout,有什么方法可以使测试通过?
这是我正在测试的代码部分:HeartbeatController#create
您也可以通过发送拉取请求帮助我们解决问题:https://github.com/multunus/one-mdm/issues/1
【问题讨论】:
-
publishCreateStub是什么? -
publishCreate是一种在创建模型时通过套接字广播消息的方法。可以看代码部分here
标签: javascript node.js sails.js mocha.js supertest