如何解决如何为 mongo db 模型方法重置笑话模拟
以下是存储库功能。
const documentToObject = (document: CustomerDocument): ICustomerModel => {
return document.toObject({ getters: true }) as ICustomerModel;
};
const createCustomer = async (
customer: ICustomerModel
): Promise< ICustomerModel > => {
try {
const customerDocument = await CustomerModel.create(customer);
return documentToObject(customerDocument);
} catch (error) {
logger.error('Error while saving customer');
throw new AppError(ERROR_CODE.Failed_TO_CREATE_CUSTOMER);
}
};
我也想测试错误情况。但只是模拟不会重置 CustomerModel.create
的模拟实现示例单元测试用例。
jest.mock('mongoose',() => {
const mongoose = require.requireActual('mongoose');
return new mongoose.Mongoose();
});
describe('customer repository',() => {
let mongod: MongoMemoryServer;
beforeAll(async () => {
mongod = new MongoMemoryServer();
const mongoDbUri = await mongod.getConnectionString();
await mongoose.connect(mongoDbUri,{ useNewUrlParser: true });
});
beforeEach(() => {
jest.resetAllMocks();
});
afterEach(async () => {
expect.hasAssertions();
await CustomerModel.remove({});
jest.clearallMocks();
});
afterall(async () => {
await mongoose.disconnect();
await mongod.stop();
});
describe('#create customer',() => {
it('should create a customer',async () => {
const customer = getCustomer();
const createdCustomer = await customerRepository.createCustomer(customer);
expect(createdCustomer.id).tobedefined();
});
it('should throw Failed_TO_CREATE_CUSTOMER when error while creating customer',async () => {
//given
const customer = getCustomer();
CustomerModel.create = jest
.fn()
.mockRejectedValueOnce(new Error('error'));
await expect(
customerRepository.createCustomer(
customer,)
).rejects.toThrow(ERROR_CODE.Failed_TO_CREATE_CUSTOMER);
});
});
});
在此错误单元案例之后,如果我将 CustomerRepository.createCustomer 用于任何其他测试案例,它也会抛出。 jest 不会在每次测试后清除模拟。我该如何解决这个问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。