如何使用Cypress移除Fixture CSV文件中的回车换行符
Cypress CSV比对失败:换行符不一致问题解决
问题背景
在Cypress测试中,需要比对网站导出的CSV文件与Fixture目录下的CSV文件内容,但因Fixture文件(Windows系统生成)使用\r\n换行,而下载的CSV文件(类Unix系统生成)使用\n换行,导致断言失败。尝试用replace('\r\n', '\n')仅替换了第一行的换行符,其余行未生效。
解决方案
JavaScript中String.replace()方法如果传入普通字符串作为匹配项,只会替换第一个匹配结果。要全局替换所有的\r\n,需要使用正则表达式并添加全局标识g。
修改断言处的代码,将固定字符串替换改为正则全局替换:
// 原代码:仅替换第一个\r\n expect(downloadCsv.trim()).to.eq(fixturesCsv.replace('\r\n', '\n').trim()); // 修改后:全局替换所有\r\n expect(downloadCsv.trim()).to.eq(fixturesCsv.replace(/\r\n/g, '\n').trim());
修改后的完整测试代码
const grouplist = [' TYP ', ' PRÜFSTAND ', ' TYP/PRÜFSTAND ', ' PRÜFSTAND/TYP ', ' WERKSTÜCKTRÄGER NUMMER '] it('Ergebnisstatistik - check export for grouplist - Werkstückträger 🏇', function() { cy.log('Export the Werkstückträger Nummer table into EXCEL'); const dayjs = require('dayjs'); cy.get('button.icon-btn_statistik').should('be.visible').click(); cy.contains('div>div.option', grouplist[4]).should('be.visible').click(); cy.wait(500); cy.get('.icon-table').click(); sdi.waitForTable(); cy.get('.icon-export-table').click(); cy.readFile(`${Cypress.config('downloadsFolder')}/Ergebnisstatistik ` + dayjs().format('YYYY-MM-DD') + '.csv', 'utf-8', {timeout: 15000}).then((downloadCsv) => { expect(downloadCsv).to.be.a('string') cy.readFile(`${Cypress.config('fixturesFolder')}/sda_ergebnisstatistik_export/Ergebnisstatistik_5Werkstückträger_Export.csv`, 'utf-8', {timeout: 15000}).then((fixturesCsv) => { // 关键修改:使用正则全局替换所有\r\n为\n expect(downloadCsv.trim()).to.eq(fixturesCsv.replace(/\r\n/g, '\n').trim()); }); }); });
额外优化建议
为了更稳妥,也可以将下载的CSV文件的换行符也统一处理(比如防止出现混合换行的情况),可以封装一个统一处理换行符的函数:
const normalizeNewlines = (str) => str.replace(/\r\n/g, '\n').replace(/\r/g, '\n'); expect(normalizeNewlines(downloadCsv).trim()).to.eq(normalizeNewlines(fixturesCsv).trim());
内容的提问来源于stack exchange,提问作者Gowthami Dhulipudi
相关产品推荐
相关产品推荐

