【发布时间】:2021-03-04 21:43:54
【问题描述】:
我有一个函数,我将时间范围作为输入并从我的数据库中获取 2 行。我需要获取给定范围内第一个和最后一个数据条目之间的字段差异。
我的功能
async getUsage(start: Date, id: number) {
const initial = await this.datarepo
.createQueryBuilder('data')
.where('data.deviceId = :id and data.RTC > :start')
.setParameter('id', id)
.setParameter('start', start)
.orderBy('data.RTC', 'ASC')
.getOne();
const final = await this.datarepo
.createQueryBuilder('data')
.where('data.deviceId = :id and data.RTC > :start')
.setParameter('id', id)
.setParameter('start', start)
.orderBy('data.RTC', 'DESC')
.getOne();
if (!final) return 0;
const usage = final.reading- initial.reading;
return usage;
}
当我尝试模拟该函数时,即使我使用 mockResolvedValueOnce(),每次调用都会获得相同的数据
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
DataService,
{
provide: getRepositoryToken(dataentity),
useValue: {
create: jest.fn(),
save: jest.fn(),
},
},
],
}).compile();
service = module.get<DataService>(DataService);
datarepo= module.get(getRepositoryToken(dataentity));
});
it('gives the difference between energy readings for the given time range', async () => {
datarepo.createQueryBuilder = jest.fn(() => ({
where: jest.fn().mockReturnThis(),
setParameter: jest.fn().mockReturnThis(),
orderBy: jest.fn().mockReturnThis(),
getOne: jest
.fn()
.mockResolvedValueOnce(usageStart)
.mockResolvedValueOnce(usageEnd),
}));
const result = await service.getUsage(new Date('2021-03-01T11:57:00.000Z'), 981);
expect(result).toEqual(5);
});
const usageStart = {
reading: 70,
RTC: '2021-03-01T11:57:45.000Z',
};
const usageEnd = {
reading: 75,
RTC: '2021-03-01T12:57:45.000Z',
};
我应该得到 5 作为结果,但我得到 0
expect(received).toEqual(expected) // deep equality
Expected: 5
Received: 0
【问题讨论】:
-
你是如何初始化
datarepo的?你是导入还是使用依赖注入? -
更新了代码以包含 datarepo 的初始化方式
标签: typescript jestjs mocking nestjs ts-jest