Reputation: 334
I need to test a call like this:
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();
my test:
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);
but i receive:
ConnectionNotFoundError: Connection "default" was not found.
i tried many solutions, but none worked. any suggestions?
thx to all
Upvotes: 2
Views: 3601
Reputation: 334
Here the solution I 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);
note that I have mulitple connections in my app so I stubbed the typeorm.createConnections function and multiple buildingManager in tested code so I use onFirstCall and onSecondCall.
Upvotes: 3