1 Star 0 Fork 0

Vue.js/vue-vapor

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
setup-vitest.ts 2.71 KB
一键复制 编辑 原始数据 按行查看 历史
import type { MockInstance } from 'vitest'
declare module 'vitest' {
interface Assertion<T = any> extends CustomMatchers<T> {}
interface AsymmetricMatchersContaining extends CustomMatchers {}
}
interface CustomMatchers<R = unknown> {
toHaveBeenWarned(): R
toHaveBeenWarnedLast(): R
toHaveBeenWarnedTimes(n: number): R
}
vi.stubGlobal('MathMLElement', class MathMLElement {})
expect.extend({
toHaveBeenWarned(received: string) {
const passed = warn.mock.calls.some(args => args[0].includes(received))
if (passed) {
asserted.add(received)
return {
pass: true,
message: () => `expected "${received}" not to have been warned.`,
}
} else {
const msgs = warn.mock.calls.map(args => args[0]).join('\n - ')
return {
pass: false,
message: () =>
`expected "${received}" to have been warned` +
(msgs.length
? `.\n\nActual messages:\n\n - ${msgs}`
: ` but no warning was recorded.`),
}
}
},
toHaveBeenWarnedLast(received: string) {
const passed =
warn.mock.calls[warn.mock.calls.length - 1][0].includes(received)
if (passed) {
asserted.add(received)
return {
pass: true,
message: () => `expected "${received}" not to have been warned last.`,
}
} else {
const msgs = warn.mock.calls.map(args => args[0]).join('\n - ')
return {
pass: false,
message: () =>
`expected "${received}" to have been warned last.\n\nActual messages:\n\n - ${msgs}`,
}
}
},
toHaveBeenWarnedTimes(received: string, n: number) {
let found = 0
warn.mock.calls.forEach(args => {
if (args[0].includes(received)) {
found++
}
})
if (found === n) {
asserted.add(received)
return {
pass: true,
message: () => `expected "${received}" to have been warned ${n} times.`,
}
} else {
return {
pass: false,
message: () =>
`expected "${received}" to have been warned ${n} times but got ${found}.`,
}
}
},
})
let warn: MockInstance
const asserted: Set<string> = new Set()
beforeEach(() => {
asserted.clear()
warn = vi.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.includes(assertedMsg)
})
})
warn.mockRestore()
if (nonAssertedWarnings.length) {
throw new Error(
`test case threw unexpected warnings:\n - ${nonAssertedWarnings.join(
'\n - ',
)}`,
)
}
})
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/vuejs/vue-vapor.git
git@gitee.com:vuejs/vue-vapor.git
vuejs
vue-vapor
vue-vapor
main

搜索帮助