I want to mock an object method that throws an error but the test is always failing with these errors.
I can't post the image yet but please check the link. It shows the test failing.
Here's my code below:
workload.js
const workload = {
job: [
{workload_1: 'workload 1'}
],
createWorkloadJSON: async function(workload){
await fsp.appendFile('./workload.json',JSON.stringify(workload))
if(fs.existsSync('./workload.json')) return true
else throw new Error('workload.json creating failed.')
}
}
workload.test.js
describe('workload', ()=>{
afterEach(()=>{
vi.restoreAllMocks()
})
it('throws an error when workload.json is not found', async ()=>{
const spy = vi.spyOn(workload, 'createWorkloadJSON').mockImplementation(async()=>{
throw new Error('workload.json creating failed.')
})
expect(await workload.createWorkloadJSON()).toThrow(new Error('workload.json creating failed.'))
expect(spy).toHaveBeenCalled()
})
})
Throwing in the test scope will throw in the test. Generally you need to pass a function instead, otherwise it will run in place. In Vitest you can use https://vitest.dev/api/expect.html#rejects to skip some boilerplate.