Cypress测试Salesforce报'Whoops,there is no test to run'如何解决
Cypress测试Salesforce弹出「Whoops, there is no test to run」错误排查
这个报错在Cypress对接Salesforce Lightning应用的场景下非常常见,和你有没有写it测试块没有直接关系,核心是Cypress的测试运行上下文丢失,或者测试文件根本没被正确解析,按下面的顺序排查即可:
- 优先排查跨域重定向冲掉测试上下文的问题
Salesforce登录、模块跳转时会触发多次跨域重定向,很容易把Cypress注入到页面里的测试运行脚本顶掉,Cypress检测不到页面挂载的测试用例就会抛这个错。直接修改配置文件适配即可:
打开cypress.config.js(Cypress10以前版本是cypress.json),在e2e配置块里加以下参数:
注意测试代码里不要随便用e2e: { baseUrl: "填写自身使用的Salesforce测试环境地址", chromeWebSecurity: false, experimentalSessionAndOrigin: true, testIsolation: false }cy.visit()跳转到和baseUrl根域名不一致的外部地址,很容易直接跳出Cypress的测试上下文。 - 排查测试文件语法/依赖错误
如果describe块里存在语法问题——比如括号没闭合、导入的自定义命令报错、异步逻辑漏写await,Cypress解析测试文件失败,就会出现“文件存在但没有可运行用例”的情况。
排查方法:打开Test Runner里的浏览器开发者工具,切到Console面板,查找红色的JS报错,顺着报错位置修复即可。可以先在测试文件最外层写个最简用例做验证:
如果连这个最简用例都加载不出来,百分之百是文件本身的语法、依赖问题。it('文件加载校验', () => { expect(1).to.equal(1) }) - 排查Salesforce CSP策略拦截Cypress脚本
Salesforce Lightning默认开启严格的内容安全策略,会拦截非官方源注入的JS脚本,Cypress的运行脚本被拦截后自然没法识别待执行用例。在配置文件的setupNodeEvents节点加浏览器启动参数,绕过CSP限制:setupNodeEvents(on, config) { on('before:browser:launch', (browser, launchOptions) => { if (browser.family === 'chromium' && browser.name !== 'electron') { launchOptions.args.push('--disable-features=IsolateOrigins,site-per-process') launchOptions.args.push('--disable-web-security') } return launchOptions }) } - 排查Test Runner的文件过滤问题
检查Test Runner顶部的搜索过滤框,是不是误输入了过滤关键词,把写好用例的测试文件排除在外了;如果是刚新建的测试文件,直接重启Test Runner触发文件重新扫描即可。
实操提示:跑Salesforce测试不要用Cypress默认的Electron浏览器,优先选Chrome、Edge正式版,Electron对Lightning组件兼容性差,出现上下文丢失的概率高很多。
内容的提问来源于stack exchange,提问作者manish tiwari
相关产品推荐
相关产品推荐

