我需要测试这样的调用:
const queryBuilder = getConnection('default')
.createQueryBuilder(Reading, 'r')
.where("r.code = :code AND um = 'KWH'", { code: meter.code })
.andWhere(" measure_date BETWEEN to_date(:startDate,'YYYY-MM-DD') AND to_date(:endDate,'YYYY-MM-DD')", {
startDate,
endDate,
})
.andWhere('r.deleted_at IS NULL')
.orderBy('r.measure_date', 'DESC')
.addOrderBy('r.reading_type')
.addOrderBy('r.band', 'ASC');
const readings = await queryBuilder.getMany();
我的测试:
const fakeSelectQueryBuilder = createStubInstance(typeorm.SelectQueryBuilder);
fakeSelectQueryBuilder.where.returnsThis();
fakeSelectQueryBuilder.andWhere.returnsThis();
fakeSelectQueryBuilder.addOrderBy.returnsThis();
fakeSelectQueryBuilder.orderBy.returnsThis();
fakeSelectQueryBuilder.getMany.resolves([]);
const fakeConnection = createStubInstance(typeorm.Connection);
fakeConnection.createQueryBuilder.resolves(fakeSelectQueryBuilder);
但我收到:
ConnectionNotFoundError: Connection "default" was not found.
我尝试了很多解决方案,但没有一个有效。 有什么建议吗?
谢谢大家
最佳答案
这是我找到的解决方案:
const fakeSelectQueryBuilder = sandbox.createStubInstance(typeorm.SelectQueryBuilder);
fakeSelectQueryBuilder.where.returnsThis();
fakeSelectQueryBuilder.andWhere.returnsThis();
fakeSelectQueryBuilder.addOrderBy.returnsThis();
fakeSelectQueryBuilder.orderBy.returnsThis();
fakeSelectQueryBuilder.getMany.resolves([{ plp: 666 }]);
const fakeSelectQueryBuilder2 = sandbox.createStubInstance(typeorm.SelectQueryBuilder);
fakeSelectQueryBuilder2.where.returnsThis();
fakeSelectQueryBuilder2.andWhere.returnsThis();
fakeSelectQueryBuilder2.addOrderBy.returnsThis();
fakeSelectQueryBuilder2.orderBy.returnsThis();
fakeSelectQueryBuilder2.getMany.resolves([{ plp: 999 }]);
const connection = sandbox.createStubInstance(typeorm.Connection);
connection.createQueryBuilder.onFirstCall().callsFake((p): any => {
return fakeSelectQueryBuilder as any;
});
connection.createQueryBuilder.onSecondCall().callsFake((p): any => {
return fakeSelectQueryBuilder2 as any;
});
sandbox.stub(typeorm, 'createConnections').resolves(([connection] as unknown) as typeorm.Connection[]);
sandbox.stub(typeorm, 'getConnection').returns(connection as any);
请注意,我的应用程序中有多个连接,因此我在测试代码中 stub 了 typeorm.createConnections 函数和多个buildingManager,因此我使用 onFirstCall 和 onSecondCall.
关于node.js - 模拟 Typeorm QueryBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67160124/