【发布时间】:2016-10-11 11:39:41
【问题描述】:
我编写了一个基于承诺的 API。哪个是单元测试的最佳方法? Jasmine 是个好方法吗?
还可以给我一个关于如何对承诺进行单元测试的例子吗?一个单元是否应该同时测试“then”和“catch”部分?
【问题讨论】:
标签: javascript node.js unit-testing jasmine
我编写了一个基于承诺的 API。哪个是单元测试的最佳方法? Jasmine 是个好方法吗?
还可以给我一个关于如何对承诺进行单元测试的例子吗?一个单元是否应该同时测试“then”和“catch”部分?
【问题讨论】:
标签: javascript node.js unit-testing jasmine
Jasmine 绝对是进行基于 Promise 的单元测试的最佳选择。在不太了解您的 API 的情况下,以下是一些示例,说明如何在等待 Promise 解决或失败时进行单元测试。
下面示例中的关键字是传递给每个单元测试的done 变量(it 块)。这让 jasmine 知道测试是异步的,并且 jasmine 将等待调用 done 函数,然后再从该单元测试继续。
希望这会有所帮助!
describe('Unit tests', function() {
it('promise should succeed', function (done) {
myApi.function().then(function(data) {
//assert data came back correctly
done();
}).catch(function() {
fail();
});
});
it('promise should throw error', function() {
myApi.function().then(function(data) {
fail();
}).catch(function(error) {
//assert error has been thrown correctly
done();
});
});
});
【讨论】:
Jasmine 是一个单元测试框架,它提供了一个测试运行器、断言方法和基于其中的模拟/间谍。它是单元测试 javascript 代码的一种流行方式。它并不比任何其他可用的方法/框架更好,应该根据其他选项进行评估,看看它是否适合您的项目。
没有示例代码,单元测试承诺应该与单元测试任何其他代码没有什么不同。存根 IO 依赖项并评估所有关键逻辑路径。如果你的 promise 明确抛出,catch 可能是一种有价值的断言方法。与then 相同,调用then 应该允许您测试您的解析逻辑。
必须通过then 和catch 与您的代码交互可能不是练习您的承诺逻辑的最有效方式。如果有大量逻辑,最好将其封装在 Promise 之外的函数中,以便更轻松地进行单元测试。然后可以通过解析 promise 轻松测试该核心逻辑的接口。
【讨论】: