前言
在前端开发中,测试是一项十分重要的工作。而 Mocha 和 Chai 是流行的两个测试框架,可以很好地解决这个问题。但在测试 Promise 的时候会产生一些样板代码,不利于测试的简洁性和可读性。为了解决这个问题,我们可以使用一个小巧而又强大的 npm 包,它就是 mocha-promise-me。
在本文中,我们将介绍怎样使用 mocha-promise-me 这个 npm 包,让你的 Promise 测试更加清晰和简便。
安装 mocha-promise-me
首先,我们要在项目中安装这个 npm 包。打开终端,切换到项目根目录,输入以下命令:
npm install --save-dev mocha-promise-me
其中,--save-dev
表示将 mocha-promise-me 作为开发时依赖(devDependency)安装。
使用 mocha-promise-me
在这里,我们先假设你已经运行过 Mocha 和 Chai 测试框架的测试用例。
接下来,我们要做的是在我们的测试用例中,加入 mocha-promise-me 的特殊语法。这样,我们就能用更少的代码,更好地测试 Promise 对象了。
.should.be.resolved() 和 .should.be.rejected()
我们可以使用 .should.be.resolved()
函数来验证 Promise 对象成功 resolve,或者 .should.be.rejected()
函数来验证 Promise 对象被 reject。这两个函数都可以链式调用,比如:
it('should resolve asset prices', function () { return getAssetPrices().should.eventually.deep.equal(testData); }); it('should reject if getAssetPrices() is called with a non-array parameter', function () { return getAssetPrices('non-array').should.be.rejected(); });
上面的这段代码就是使用了这两个函数对 Promise 对象进行测试。
.withTimeout()
另外,如果你希望进行限时测试,也可以使用 .withTimeout()
函数。这个函数可以接受一个毫秒数作为参数,表示测试不会超过这个时间,比如:
it('should take less than 500ms to get asset prices', function () { return getAssetPrices().should.eventually.have.lengthOf(testData.length).withTimeout(500); });
在上面的例子中,getAssetPrices()
获取数量为 testData
长度的资产价格,并在 500 毫秒内返回。
示例代码
最后,我们来看一个完整的测试用例。下面是一个单元测试,它测试了一个返回 Promise 对象的函数 addNumbers()
。
-- -------------------- ---- ------- ----- ---------- - ------------------------- ----- ---- - ---------------- ----- -------------- - ---------------------------- ----- - ------ - - ----- ------------------------- -------------- ---------------------- -------- -- - ---------- --- --- ------- ---- ----- ------- -------- -- - ----- ------ - ------------- -- ------ ------ ---------------------------------- --- ---------- ---- -- ----- -- --- -------- -- - ----- ------ - ------------- -- --- ------ ------------------------------------ ------ ------ -- ------- ---- ----- --- ---------- ---- -- ----- -- ---------- -------- -- - ----- ------ - ------------- -- ------- ------ ------------------------------------- --- ---
在这个测试用例中,我们使用了 Mocha 测试框架、Chai 断言库和 chai-as-promised。我们断言 addNumbers() 函数的各种结果,比如成功返回两个数字的和、delay 不是正整数产生错误等等。
我们可以看到,在每个测试用例中,我们都返回了一个 Promise 对象来表示测试是否通过。并且,我们使用了 .should.eventually.equal()
函数对 Promise 对象返回值进行断言,提高了测试可读性。
另外,在第二个测试用例中,我们使用 .should.be.rejectedWith()
函数来验证 Promise 对象被 reject。.should.be.rejectedWith()
函数需要传入一个错误类型和错误信息,以便更好地理解错误原因。
总结
这篇文章中,我们介绍并实践了 mocha-promise-me 这个 npm 包,它可以帮助我们更方便地测试 Promise 对象。我们了解了 .should.be.resolved()
和 .should.be.rejected()
等函数的用法,并使用它们测试了一个具体的例子。希望这个 npm 包能给你的测试带来帮助,提高你的工作效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005569481e8991b448d35f7