-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
我们经常会写这种测试:
console.log(await call1())
console.log(await call2())如果以常规的测试写法,应该是:
defineTest('call', ()=>{
t.eq(await call1(), 1)
t.eq(await call2(), 2)
})所以符合开发者直觉的应该是这样:
defineTest('call', (t) => {
// 进行日志匹配测试
t.traceLog({methods:['log','info','warn','error']})
// 这里全局的 console.log/info/warn/error 会被替换,也就是说call1里头的其它函数如果也调了console,也会被记录下来
// 此时应该尽可能避免打印 时间、随机内容,如果非要打印,可能可以使用 console.noTrace.log(new Date) 这样的方式来绕过
console.log(await call1())
console.log(await call2())
})此时,直接执行该测试:
bfsp test call
如果: test/assets/log/call.log 不存在,那么会默认创建该文件
如果: test/assets/log/call.log 存在,那么会比对该文件中的日志输出,如果一致
这种方案还有一个问题,就是console这个对象。并不适用于每一个项目。
所以我们可能可以简单地换一种写法:
// 定义“日志型”测试
defineLogTest('call', (t) => {
t.log(await call1())
t.log(await call2())
})如果想将日志污染到全局,那么未来也许可以使用代码宏来进行操作:
//#macro log
const log = globalThis.TEST_ENV ? (...fields) => {
return ts`globalThis.test.logger.log(${fields})`
} : (...fields) => {
return ts`console.log(${fields})`
}
//#endmarcoMetadata
Metadata
Assignees
Labels
No labels