在前端开发中,我们经常会使用 Promise 来处理异步操作。而在测试中,我们也需要对 Promise 进行断言,判断其是否正确执行。Chai 是一个常用的断言库,它提供了多种方式来辨别一个 Promise 对象是 resolved 还是 rejected。
1. 使用 eventually 方法
Chai 提供了 eventually 方法,可以用于判断 Promise 对象是否 resolved。示例代码如下:
// www.javascriptcn.com code example
const { expect } = require('chai');
describe('Promise test', () => {
it('should resolve with "hello world"', () => {
const promise = Promise.resolve('hello world');
return expect(promise).to.eventually.equal('hello world');
});
it('should reject with error message', () => {
const promise = Promise.reject(new Error('error message'));
return expect(promise).to.be.rejectedWith('error message');
});
});上述代码中,eventually 方法可以链式调用,用于判断 Promise 是否 resolved。如果 Promise 被 resolved,它会返回 resolved 的值;如果 Promise 被 rejected,它会抛出错误。be.rejectedWith 方法则用于判断 Promise 是否被 rejected,并可以指定错误信息。
2. 使用 fulfilled 和 rejected 方法
除了 eventually 方法,Chai 还提供了 fulfilled 和 rejected 方法,用于判断 Promise 是否 resolved 或 rejected。示例代码如下:
// www.javascriptcn.com code example
const { expect } = require('chai');
describe('Promise test', () => {
it('should resolve with "hello world"', () => {
const promise = Promise.resolve('hello world');
return expect(promise).to.be.fulfilled;
});
it('should reject with error message', () => {
const promise = Promise.reject(new Error('error message'));
return expect(promise).to.be.rejected;
});
});上述代码中,fulfilled 方法用于判断 Promise 是否 resolved,rejected 方法用于判断 Promise 是否 rejected。
3. 使用 notify 方法
有时候我们需要在测试中使用回调函数来处理异步操作,而 Chai 也提供了 notify 方法来处理这种情况。示例代码如下:
// www.javascriptcn.com code example
const { expect } = require('chai');
describe('Promise test', () => {
it('should resolve with "hello world"', (done) => {
const promise = Promise.resolve('hello world');
expect(promise).to.eventually.equal('hello world').notify(done);
});
it('should reject with error message', (done) => {
const promise = Promise.reject(new Error('error message'));
expect(promise).to.be.rejectedWith('error message').notify(done);
});
});上述代码中,notify 方法可以用于处理回调函数,当 Promise 被 resolved 或 rejected 时,它会调用回调函数并传入错误信息。这种方式可以避免在测试中使用 done 方法来处理异步操作。
总之,Chai 提供了多种方式来辨别一个 Promise 对象是 resolved 还是 rejected,我们可以根据需要选择合适的方法来进行断言。同时,在使用 Promise 进行异步操作时,我们也需要注意 Promise 的状态,以便进行正确的断言和处理。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d42e6fa941bf71347e1f68