在前端开发中,测试是非常重要的环节。测试可以帮助我们发现问题,保证代码质量。Chai.js 是一个常用的 Jest 类库,它提供了很多方便的 API 来进行测试。在本文中,我们将着重介绍 Chai.js 中 assert.rejects 和 assert.doesNotReject 两个 API 的使用。
assert.rejects
assert.rejects 是一个非常常用的 API,它用来测试一个 Promise 是否会被 rejection。我们可以使用 chaiAsPromised 插件来引入 assert.rejects。chaiAsPromised 插件会给所有的应该返回一个 Promise 的断言增加类似 rejects, eventually 及 fulfilled() 的 API。
使用方式如下所示:
-- -------------------- ---- ------- ------ ----- - ------ - ---- ------- ------ -------------- ---- ------------------- ------------------------- ------------------- ---- ---------- -- -- - --------- -------- ---------- -- -- - ----- -------- --------------- - ----- --- ------------ -------- -- ---------------- - ------ -------------------------------------------------- --- ---
上述示例中,我们使用了 async-await 的语法来执行异步代码,throw new Error 会使得我们定义的 Promise 被 rejection。在测试用例中, 我们通过 expect 函数调用 assert.rejects 告诉断言库我们期望一个 rejection。通过 rejectedWith 函数来判断 rejection 的类型是否与我们期望的相同。
如果不是用 async-await,我们也可以使用 Promises,使用方式如下所示:
it('promise rejected', () => { const rejectPromise = () => Promise.reject(new Error('Error occurred in rejectPromise')); return expect(rejectPromise()).to.be.rejectedWith(Error); });
在上述示例中,我们使用了箭头函数定义了一个 function,用于创建一个 rejected 的 Promise。使用 expect 函数调用了 assert.rejects,之后使用 rejectedWith 函数来判断 rejection 的类型是否与我们预期的相同。
assert.doesNotReject
与 assert.rejects 相反,assert.doesNotReject 用来测试一个 Promise 是否没有被 rejection。使用方式如下所示:
it('async function does not reject', () => { async function successfulPromise() { return 'Success'; } return expect(successfulPromise()).to.not.be.rejected; });
在上述示例中,我们使用了 async-await 的语法来执行异步代码,成功执行的 Promise 不会被 reject。 我们通过 expect 函数调用 assert.doesNotReject 告诉断言库我们期望 Promise 不被 rejection。
如果不是用 async-await,我们也可以使用 Promises,使用方式如下所示:
it('promise does not reject', () => { const successfulPromise = () => new Promise(resolve => setTimeout(resolve, 100)); return expect(successfulPromise()).to.not.be.rejected; });
在上述示例中,我们使用了箭头函数定义了一个 function,用于创建一个成功执行的 Promise。使用 expect 函数调用了 assert.doesNotReject。
总结
在前端开发中,测试是非常重要的环节。Chai.js 提供了很多方便的测试 API,包括 assert.rejects 和 assert.doesNotReject。这两个 API 在测试 Promise 的 rejection 和成功执行面时都非常方便。掌握正确的使用方式可以帮助我们更好地进行测试,提高代码质量。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64bfa4799e06631ab9c28eb6