【发布时间】:2016-08-18 01:11:38
【问题描述】:
我有以下两个sn-ps:
1.这是我要运行的单元:
health.checkHealth = function (req, res) {
async.parallel({
cassandra: function (callback) {
cassandraRepository.ping(callback);
},
kafka: function (callback) {
kafkaHelper.ping(callback);
},
vault: function (callback) {
vaultClient.health()
.then((isOk)=>{
callback(null, isOk)})
.catch(()=>
callback(null, false));
}
}, function (err, result) {
var response = {};
if (result.cassandra) {
response.cassandra = "OK";
} else {
response.cassandra = "Failed";
res.status(500);
}
if (result.kafka) {
response.kafka = "OK";
} else {
response.kafka = "Failed";
res.status(500);
}
if (result.vault) {
response.vault = "OK";
} else {
response.vault = "Failed";
res.status(500);
}
res.send(response);
})
}
2.这是检查单元的测试:
describe('vault is avaliable', function () {
beforeEach(sinon.test(function () {
sinon.stub(vaultClient, "health").resolves(true);
}));
it('should return 200', sinon.test(function (done) {
var response = {
vault: "OK"
};
var req = {};
var res = {};
var spySend = res.send = sinon.spy();
var spyStatus = res.status = sinon.spy();
health.checkHealth(req, res);
expect(spySend.calledOnce).to.equal(true);
expect(spySend.calledWith(response));
expect(spyStatus.calledOnce).to.equal(false);
}));
});
我的问题是,当我调用 checkHealth 时,它会继续执行下一行 (expect(spySend.callOnce).to.equal(true);),而无需等待 vaultClient 的承诺完成。 我需要做什么才能使期望仅在“checkHealth”运行后才运行。
【问题讨论】:
-
是的。不要在承诺中使用
async.js。 -
你使用的是什么 promise 库?
-
@Bergi 它的原生承诺。有没有办法使用 promise 来克服这个问题?
-
是的。只需删除
async.parallel并改用Promise.all。你可能想promisifyping。
标签: node.js asynchronous promise