Linux与MacOS下TypeScript无法捕获Cypress控制台日志问题
Cypress控制台日志跨平台捕获问题
需求与执行代码
我通过以下代码执行Cypress测试用例,期望捕获Cypress生成的控制台日志:
注:result包含测试数据,但我明确需要捕获控制台日志。
consoleLogger.bind({ 'xyz': 'abc' }) const result = await cypress.run({ spec: '/../test.cy.js', project: ProjectConfiguration.projectDir, }) consoleLogger.unbind()
日志捕获实现代码
我使用如下代码实现日志捕获,该代码在Windows系统可正常运行:
class ConsoleLogger { private originalStdoutWrite: any private originalStderrWrite: any private logger: any constructor(testLogger: any) { this.logger = testLogger this.originalStdoutWrite = process.stdout.write.bind(process.stdout) this.originalStderrWrite = process.stderr.write.bind(process.stderr) } public bind(extra: {}) { // Override stdout to capture Cypress console logs process.stdout.write = ( chunk: string | Uint8Array, ...args: any[] ): boolean => { const output = chunk.toString().trim() if (output) { try { this.logger.info(output, { ...extra, source: 'stdout', }) } catch (err) { this.logger.error(err) } } return true } process.stderr.write = ( chunk: string | Uint8Array, ...args: any[] ): boolean => { const output = chunk.toString().trim() if (output) { try { this.logger.error(output, { ...extra, source: 'stderr', }) } catch (err) { this.logger.error(err) } } return true } } public unbind() { process.stdout.write = this.originalStdoutWrite process.stderr.write = this.originalStderrWrite } } export default ConsoleLogger
Winston日志写入配置
同时我使用Winston将控制台日志写入文件,配置代码如下:
import { createLogger, format, transports } from 'winston' import ProjectConfiguration from '../projectConfiguration' const { combine, timestamp } = format const TestLoggerFactory = () => { const logger = createLogger({ format: combine(timestamp(), format.json()), transports: [ new transports.File({ filename: ProjectConfiguration.getLogFilePath(), // Specify log file location options: { flags: 'w' }, }), ], }) return logger } export default TestLoggerFactory
问题现象
- 该日志捕获代码在Windows系统正常工作,但在Linux和MacOS中存在异常
- Linux和MacOS下日志仅打印在控制台,未写入指定文件
- Linux和MacOS下仅错误日志(stderr)可写入文件,*标准输出(stdout)*日志无法正常捕获写入
内容的提问来源于stack exchange,提问作者Vicky Thakor
相关产品推荐
相关产品推荐

