【发布时间】:2018-05-10 09:40:37
【问题描述】:
我很难测试基于 Promise 的函数。我使用 Mocha 作为测试框架和 chai 库作为断言框架。我对摩卡和柴都是新手。我的问题很少,我不知道我的代码有问题。也许我的测试方法完全错误,也许有人帮助他们。
我得到了预期的 Uncaught (in promise) 错误,但实际上我不知道我的方法是否是测试这些函数的正确方法。
这是我的 returnResult 函数,它解析一个值 -> 一个字符串
var returnResult = function (stateParamName, stateParamValue) {
return new Promise((resolve, reject) => {
peer3.get({ path: { equals: 'todo/#0' } }).then(function (results) {
console.log(stateParamName + ': ' + results[0].value[stateParamName])
resolve(results[0].value[stateParamName]);
});
});
}
这是我的摩卡咖啡测试
describe("Call Tests Suite", function () {
describe("Basic Call Test", function () {
it("Call status for both side should be IN CALL", function () {
peer3.call('login/add', ['testaccount1'])
.then(() => peer3.call('todo/makeCall1', ['testaccount2@testdomain.com']))
.then(() => checkResult('state_term', 'RINGING'))
.then((interval) => { clearInterval(interval); peer3.call('todo/answerCall2', ['empty']) })
.then(() => checkResult('state_term', 'IN_CALL'))
.then((interval) => clearInterval(interval))
//.then(console.log('test sonucu: ' + returnResult('state_term', 'IN_CALL')))
.then(returnResult('state_term', 'IN_CALL'))
.then((result) => expect(result).to.equal('IN_CALL'))
});
});
如您所见,我只对最后一个结果使用断言。也许我应该将整个测试作为一个承诺函数进行测试。有人可以帮我吗?
【问题讨论】:
-
您的
.then((interval) => ...)没有返回承诺,但应该返回。 -
另外,您在第一个代码示例中提交了explicit promise construction antipattern。不要在那里使用
new Promise()。直接return peer3.get()即可。 -
不确定未捕获的错误来自何处,但您需要
return承诺(在测试代码的第 4 行),以便 Mocha 可以等待它完成。您也未能在第三个then中返回承诺。所以下一个then不能等待peer3.call('todo/answerCall2', ['empty'])完成。
标签: javascript promise mocha.js chai