【问题标题】:Unit testing promises from an api using Jasmine使用 Jasmine 来自 api 的单元测试承诺
【发布时间】:2016-10-11 11:39:41
【问题描述】:

我编写了一个基于承诺的 API。哪个是单元测试的最佳方法? Jasmine 是个好方法吗?

还可以给我一个关于如何对承诺进行单元测试的例子吗?一个单元是否应该同时测试“then”和“catch”部分?

【问题讨论】:

    标签: javascript node.js unit-testing jasmine


    【解决方案1】:

    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();
        });
      });
    });
    

    【讨论】:

      【解决方案2】:

      Jasmine 是一个单元测试框架,它提供了一个测试运行器、断言方法和基于其中的模拟/间谍。它是单元测试 javascript 代码的一种流行方式。它并不比任何其他可用的方法/框架更好,应该根据其他选项进行评估,看看它是否适合您的项目。

      没有示例代码,单元测试承诺应该与单元测试任何其他代码没有什么不同。存根 IO 依赖项并评估所有关键逻辑路径。如果你的 promise 明确抛出,catch 可能是一种有价值的断言方法。与then 相同,调用then 应该允许您测试您的解析逻辑。

      必须通过thencatch 与您的代码交互可能不是练习您的承诺逻辑的最有效方式。如果有大量逻辑,最好将其封装在 Promise 之外的函数中,以便更轻松地进行单元测试。然后可以通过解析 promise 轻松测试该核心逻辑的接口。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-02
        • 2014-05-19
        • 2017-08-02
        • 2013-04-25
        • 1970-01-01
        • 2020-07-30
        • 2018-02-25
        相关资源
        最近更新 更多