我正在尝试创建一个 page.on('response') 事件监听器固定装置,它将在我的所有测试中使用。
目前,只要我的代码库中存在某些事件,就会导致具有特定 ID 的 div 出现在 UI 中。 我可以通过创建一个单独的方法并将其包含在 beforeEach 挂钩中来使其工作,但是我想知道这是否可以作为自动装置实现。
//helper.js
exports.test = base.test.extend({
responseMacroErrorCheck: [async ({ page }) => {
page.on('response', data => {
if (data) {
data.body().then(b => {
let ioCheck = b.indexOf('example')
if (b && ioCheck !== -1) {
process.stdout.write(`Macro error detected on page (example)`)
process.stdout.write(`${b.toString().substring(ioCheck - 500, ioCheck + 500)}`)
throw new Error(`Macro error detected on page (example)\n${b})}`)
}
})
}
})
await use('responseMacroErrorCheck')
}, { scope: 'test', auto: true }],
})
// error.spec.js
const scanUrlList = [
'myUrl'
]
test.describe('Scan URL list for macro errors', () => {
scanUrlList.forEach(ele => {
test(ele, async ({ page }) => {
await page.goto(`myUrl`)
})
})
})
上述方法似乎可以使代码无法识别
responseMacroErrorCheck
,但是如果我添加以下代码,它就可以正常运行并按预期运行
// 助手.js
export const responseMacroErrorCheck = async (page) => {
page.on('response', data => {
if (data) {
data.body().then(b => {
let ioCheck = b.indexOf('example')
if (b && ioCheck !== -1) {
process.stdout.write(`Macro error detected on page (example)`)
process.stdout.write(`${b.toString().substring(ioCheck - 500, ioCheck + 500)}`)
throw new Error(`Macro error detected on page (example)\n${b})}`)
}
})
}
})
}
// error.spec.js
test.beforeEach(async ({ page }) => {
await h.responseMacroErrorCheck(page)
})
我的自动夹具中是否缺少某些东西?或者只是页面发出的事件在自动装置中无法识别?
必须:
import {test} from helper.js
而不是import {test} from @playwright/test