因此,我有一个带有select方法的类,它接受ID并返回承诺。我想用Jest测试它,如果没有传递给select()的参数,我希望测试失败。
希望你们中的一些人能引导我走上好的道路,这样我就能解决这个问题。
预期行为:如果ID未通过测试抛出
实际行为:测试失败,结果如下
终端
Running tests for class DB › SELECT() method tests will follow › Throws if ID is not passed
expect(received).resolves.toEqual()
Received promise rejected instead of resolved
Rejected to value: [TypeError: Cannot read property 'id' of undefined]
35 | it("Should resolve if data.id is not passed", () => {
36 | const newDB = new DB();
> 37 | expect(newDB.insert()).resolves.toEqual({});
| ^
38 | });
at expect (node_modules/expect/build/index.js:134:15)
at Object.<anonymous> (05/DB.test.js:37:7)database.js
export default class DB {
constructor() {
this._rows = [];
}
select(id) {
return new Promise((resolve, reject) => {
this.async(() => {
const [row = null] = this._rows.filter(item => item.id === id);
if(row) {
resolve(row);
} else {
reject('ID not found');
}
});
});
}
async(callback, ...params) {
setTimeout(() => {
callback(...params);
}, Math.random() * 100);
}}database.test.js
it("Throws if ID is not passed", async () => {
const dataBase = new DB();
expect.assertions(1);
// return dataBase.select().catch(e => expect(e).toThrow()); <--- doesn't work either
await expect(dataBase.select()).rejects.toThrow('error');
});发布于 2022-07-03 09:17:37
导入DB,监视select方法,并模拟其实现。
js
const dataBase = new DB();
jest.spyOn(dataBase, 'select').mockImplementation(() => Promise.reject());
await expect(dataBase.select()).rejects.toThrow('error')https://stackoverflow.com/questions/64231064
复制相似问题