export function mockWarn() {
expect.extend({
toHaveBeenWarned(received: string) {
+ asserted.add(received)
const passed = warn.mock.calls.some(
args => args[0].indexOf(received) > -1
)
},
toHaveBeenWarnedLast(received: string) {
+ asserted.add(received)
const passed =
warn.mock.calls[warn.mock.calls.length - 1][0].indexOf(received) > -1
if (passed) {
},
toHaveBeenWarnedTimes(received: string, n: number) {
+ asserted.add(received)
let found = 0
warn.mock.calls.forEach(args => {
if (args[0].indexOf(received) > -1) {
})
let warn: jest.SpyInstance
+ const asserted: Set<string> = new Set()
beforeEach(() => {
+ asserted.clear()
warn = jest.spyOn(console, 'warn')
warn.mockImplementation(() => {})
})
afterEach(() => {
+ const assertedArray = Array.from(asserted)
+ const nonAssertedWarnings = warn.mock.calls
+ .map(args => args[0])
+ .filter(received => {
+ return !assertedArray.some(assertedMsg => {
+ return received.indexOf(assertedMsg) > -1
+ })
+ })
warn.mockRestore()
+ if (nonAssertedWarnings.length) {
+ nonAssertedWarnings.forEach(warning => {
+ console.warn(warning)
+ })
+ throw new Error(`test case threw unexpected warnings.`)
+ }
})
}