I wanted to write many small tests that assert on a single result
that's only calculated once, so I wrote this structure:
(note the outer beforeAll
and beforeEach
, and the inner beforeAll
s)
describe("service", ()=>{
beforeAll(async ()=>{
await initDb()
})
beforeEach(async ()=>{
await resetConnection()
})
afterEach(async ()=>{
await cleanDb()
})
describe("#getDetails", ()=>{
describe("with a normal user", ()=>{
let result
beforeAll(async ()=>{
const user = await createDbUserEntity()
result = await service.getDetails(user)
})
it("should have a count of 1", ()=>{
expect(result.count).toEqual(1)
})
it("should not have a relationship", ()=>{
expect(result.rel).toNotBeDefined()
})
})
describe("with two related users", ()=>{
let result
beforeAll(async ()=>{
const user = await createDbUser({related: createDbUser()})
result = await service.getDetails(user)
})
it("should have a count of 2", ()=>{
expect(result.count).toEqual(1)
})
it("should have a relationship", ()=>{
expect(result.rel).toEqual({foo:"bar"})
})
})
})
})
Unfortunately the inner beforeAll
gets run before the outer beforeEach
, so nothing actually works, because the connection hasn't been reset when the inner beforeAll runs.
Is there a way to use Jest to write these tiny tests I want? Where result
is only calculated once for a group of tests, so I can write tests that are phrased exactly how my organization thinks about our business-rules?
Because with small tests like that the test-report ends up with nice names like "service #getDetails with two related users should have a count of 2" which speaks exactly to my org's domain knowledge.
question from:
https://stackoverflow.com/questions/65891301/can-i-have-multiple-jest-tests-asserting-on-a-single-result 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…