Chai 测试 TypeScript 抛出的错误信息
Chai testing TypeScript thrown error messages
我很难测试我的代码中的错误是否成功抛出了正确的消息。发生的情况是错误正确抛出但是我的测试失败了。
模块:
// users.ts
const database = require('../databases/postgres');
module.exports = {
create: async (req, res, next) => {
try {
if (!req.body.email) {
throw new Error('email needed');
}
const userCreated = await database.createUser(user);
userCreated ? res.status(200).send('success') : res.status(409).send('user already exists');
} catch(err) {
next(err);
}
}
}
测试:
// users.test.ts
const expect = require('chai').expect;
const users = require('./users');
describe('create()', () => {
it('should send an error if the user does not have an email', (done) => {
const fakeReq = {
body: {
password: 'abc'
}
};
const fakeRes = {};
expect(() => {
users.create(fakeReq, fakeRes, done)
}).to.throw(Error, 'email needed')
});
});
我对这个问题很困惑,不确定它是否是我的测试,chai/typescript 不兼容或者我正在尝试如何使用 async/await?感谢您的帮助。
Vayrex 的评论让我走上了正确的道路。我从 try/catch 块中移出了抛出的错误,我也继续使用了 Chai 的 chai-as-promised 模块。下面是对我有效的代码示例。
// users.ts
module.exports = {
create: async (req, res, next) => {
if (!userInput.email) {
throw new Error('email needed');
}
try {
const userCreated = await database.createUser(user);
userCreated ? res.status(200).send('success') : res.status(409).send('user already exists');
}
catch(err) {
next(err);
}
}
};
规格
// users.test.ts
const expect = require('chai').expect;
const users = require('./users');
const chaiAsPromised = require("chai-as-promised");
require('chai').use(chaiAsPromised);
describe('create()', () => {
it('should send an error if the user does not have an email', (done) => {
const fakeReq = {
body: {
password: 'abc'
}
};
const fakeRes = {};
return expect(users.create(fakeReq, fakeRes)).to.be.rejectedWith(Error, 'email needed');
});
});
我很难测试我的代码中的错误是否成功抛出了正确的消息。发生的情况是错误正确抛出但是我的测试失败了。
模块:
// users.ts
const database = require('../databases/postgres');
module.exports = {
create: async (req, res, next) => {
try {
if (!req.body.email) {
throw new Error('email needed');
}
const userCreated = await database.createUser(user);
userCreated ? res.status(200).send('success') : res.status(409).send('user already exists');
} catch(err) {
next(err);
}
}
}
测试:
// users.test.ts
const expect = require('chai').expect;
const users = require('./users');
describe('create()', () => {
it('should send an error if the user does not have an email', (done) => {
const fakeReq = {
body: {
password: 'abc'
}
};
const fakeRes = {};
expect(() => {
users.create(fakeReq, fakeRes, done)
}).to.throw(Error, 'email needed')
});
});
我对这个问题很困惑,不确定它是否是我的测试,chai/typescript 不兼容或者我正在尝试如何使用 async/await?感谢您的帮助。
Vayrex 的评论让我走上了正确的道路。我从 try/catch 块中移出了抛出的错误,我也继续使用了 Chai 的 chai-as-promised 模块。下面是对我有效的代码示例。
// users.ts
module.exports = {
create: async (req, res, next) => {
if (!userInput.email) {
throw new Error('email needed');
}
try {
const userCreated = await database.createUser(user);
userCreated ? res.status(200).send('success') : res.status(409).send('user already exists');
}
catch(err) {
next(err);
}
}
};
规格
// users.test.ts
const expect = require('chai').expect;
const users = require('./users');
const chaiAsPromised = require("chai-as-promised");
require('chai').use(chaiAsPromised);
describe('create()', () => {
it('should send an error if the user does not have an email', (done) => {
const fakeReq = {
body: {
password: 'abc'
}
};
const fakeRes = {};
return expect(users.create(fakeReq, fakeRes)).to.be.rejectedWith(Error, 'email needed');
});
});