赛普拉斯 - 在浏览器中自动运行所有测试,热重载

时间:2018-04-04 08:26:22

标签: cypress

默认情况下,运行cypress open会打开赛普拉斯窗口,然后我必须手动点击“运行所有测试”按钮才能全部运行。

如何只运行cypress open在浏览器中运行所有测试,而无需额外步骤?

谢谢。

编辑:我需要在更改测试文件时重新运行测试,就像cypress open一样,所以只运行一次(比如在无头模式下)也无济于事。

3 个答案:

答案 0 :(得分:3)

如果您无头地运行赛普拉斯测试cypress run,则无需单击“运行所有测试”按钮即可运行所有测试。

我发现使用npx cypress run是最好的方法。 无头地运行cypress的文档指定了您可以使用的其他选项:https://docs.cypress.io/guides/guides/command-line.html#

答案 1 :(得分:1)

使用cypress open时,您可以使用全局配置选项watchForFileChanges(详细here

来使测试在每次编辑后在浏览器中重新运行)

您可以将此作为命令行参数传递:

cypress open --config watchForFileChanges=true

或者您可以在 cypress.json 文件中指定它:

{
    "watchForFileChanges": true
}

首次运行cypress open时,您仍然需要单击运行所有规格,但是在此之后,对测试文件的任何编辑都将导致重新运行测试。

答案 2 :(得分:0)

您可以告诉赛普拉斯UI的界面(请记住赛普拉斯UI与其他页面一样都位于DOM中)以重新运行套件-只需在应用启动时发送一些预定义的信号,然后让赛普拉斯直接使用jQuery(避免日志事件)找到自己的重新加载按钮,然后单击它。

在我的示例中,“信号”是某条控制台日志消息,我的React应用在启动过程中会突然出现:

Cypress.on("window:before:load", (win) => { // registers callback early, long before the app is loaded
  win.console._log = win.console.log;
  win.console.log = function monkeyPatchedConsoleLog() {
    if (arguments[0].match(/^MyApp starting: \(.*\)/)) { // match the app's startup message
      cy.$$(".restart", top.document).click(); // click Cypress' own reload button
    }
    return win.console._log.apply(win.console, arguments); // otherwise log normally
  };
});

(将此文件包含在support/*文件中的某个位置)