Davedavedave
05/18/2022, 11:20 AMdescribe("UserService", () => {
let connection: Connection
beforeAll(async (done) => {
connection = await useRefreshDatabase({ connection: 'memory' })
await useSeeding()
const user = await factory(User)().make()
const createdUser = await factory(User)().create()
await runSeeder(CreateUserSeed)
done()
})
afterAll(async (done) => {
await tearDownDatabase()
done()
})
test('Should ...', () => { ... })
})
Can anybody chime inRichard Ward
05/18/2022, 12:13 PMprisma migrate reset drops the current db, re-creates it and runs the seed data.. It may not be good for running in tests though ..Davedavedave
05/18/2022, 12:14 PMlax
05/18/2022, 12:27 PMDavedavedave
05/18/2022, 12:32 PMDavedavedave
05/18/2022, 12:33 PMDavedavedave
05/18/2022, 12:39 PM// user.controller.spec.ts
import { execSync } from "child_process";
beforeAll(() => {
// drop db, recreate, seed
execSync('prisma migrate reset')
})lax
05/18/2022, 1:02 PMlax
05/18/2022, 1:02 PMDavedavedave
05/18/2022, 1:04 PMRichard Ward
05/18/2022, 1:05 PMRichard Ward
05/18/2022, 1:10 PMit('returns the matching user', async () => {
const userDetails = createRandomUserObject();
const createdUser = await prisma.user.create({ data: userDetails });
const response = await queryApi(USER, { userId: createdUser.id });
expect(createdUser).toEqual(expect.objectContaining(response.data.user));
});
with the `createRandomUserObject`:
export const createRandomUserObject = (partialUser: Partial<Prisma.UserCreateInput> | null = null) => {
return {
email: randomString(15) + '@example.com',
firstname: randomString(15),
surname: randomString(15),
...partialUser,
};
};
I can now target the user using createdUser.email (as that's unique in my circumstances)Davedavedave
05/18/2022, 1:11 PMRichard Ward
05/18/2022, 1:11 PMDavedavedave
05/18/2022, 1:12 PMRichard Ward
05/18/2022, 1:12 PMDavedavedave
05/18/2022, 1:12 PMuseRefreshDatabase()
useSeeding()
that prisma exposes for testing would be incredible helpfullRichard Ward
05/18/2022, 1:22 PMbeforeAll(async (done) => {
await prisma.$executeRaw`${insertDataSQL}`;
done()
})
afterAll(async (done) => {
await prisma.$executeRaw`${deleteDataSQL}`;
await prisma.$disconnect()
done()
})Davedavedave
05/18/2022, 1:25 PM