Это может быть реорганизовано, но ради демонстрации я оставил повторяющиеся биты в.
В example.spec.js
обратный вызов, changeEntryStatus
, заглушается, чтобы вернуть обещание.Чтобы проверить, были ли вызваны другие методы экземпляра (this.method
), они сначала проверяются, а затем запускаются утверждения на образце после запуска тестируемого метода.Узнайте больше в Jest Docs .(См. Мои мысли о методах насмешки тестируемого устройства внизу.)
Запустите пример на repl.it.
example.js:
class Example {
handleStatusChangeRequest(changeEntryStatus) {
return changeEntryStatus().then(() => {
this.handleStatusChangeSuccess()
}).catch(err => {
this.handleErrorDisplay(err)
})
}
handleStatusChangeSuccess() {
console.log('stubbed handleStatusChangeSuccess')
}
handleErrorDisplay(error) {
console.log('stubbed handleErrorDisplay:', error)
}
}
module.exports = Example;
example.spec.js:
const Example = require('./entryStatus')
describe('handleStatusChangeRequest', () => {
it('should run the changeEntryStatus callback', () => {
const {handleStatusChangeRequest} = new Example()
const stub = jest.fn().mockResolvedValue()
handleStatusChangeRequest(stub)
// must return because handleStatusChangeRequest is asynchronous
return expect(stub).toHaveBeenCalled()
});
it('should call example.handleStatusChangeSuccess', async () => {
const example = new Example()
const stub = jest.fn().mockResolvedValue()
example.handleStatusChangeSuccess = jest.fn()
await example.handleStatusChangeRequest(stub)
expect(example.handleStatusChangeSuccess).toHaveBeenCalled();
})
it('should call example.handleErrorDisplay', async () => {
const example = new Example()
const fakeError = { code: 'fake_error_code' }
const stub = jest.fn().mockRejectedValue(fakeError)
example.handleErrorDisplay = jest.fn()
await example.handleStatusChangeRequest(stub)
expect(example.handleErrorDisplay).toHaveBeenCalled()
expect(example.handleErrorDisplay).toHaveBeenCalledWith(fakeError)
});
});
Мнение об отказе от ответственности : методы издевательства над тестируемым устройствомзапах.Попробуйте проверить ожидаемые эффекты от вызовов handleStatusChangeSuccess
и handleErrorDisplay
вместо проверки, чтобы узнать, были ли они вызваны.Тогда даже не раскрывайте эти методы публично, если только потребителям класса не нужен доступ.