如何通过将赛普拉斯指定为项目来运行特定的测试文件夹?

Posted

技术标签:

【中文标题】如何通过将赛普拉斯指定为项目来运行特定的测试文件夹?【英文标题】:How can I get Cypress to run a specific folder of tests by specifying it as a project? 【发布时间】:2019-06-10 14:32:52 【问题描述】:

我有以下使用 Cypress 的目录结构:

cypress-automation
    cypress
        fixtures
        integration
           apps
              pulse
              smhw-prod
              smhw-qa
                  folder-a
                       sample-spec.js
        examples
        plugins
        screenshots
        support
        videos
        node_modules
        cypress.json // this is where the file currently is
        package-lock.json
        package.json

期待

我想要做的是在 smhw-qa 文件夹中运行所有测试(那里有许多规范文件).. 并且能够使用 CLI 使用 --project 命令传递它。

目前,如果我只运行 `--run` 而不使用任何其他参数,所有规范文件将从所有文件夹开始运行,这是不可取的,因为有多个应用程序“项目”(smhw-qa、smhw- prod 等)在这个结构中。这将允许我根据需要只运行单个文件夹中的规范文件。

我也知道使用--run 命令来“运行”特定文件夹,但我想使用“项目”来组织这些测试,以便以后更容易识别它们。

我查看了显示使用--project 命令的文档,但是我需要帮助了解我还需要设置什么才能使这项工作正常进行。我指的是package.json文件。

到目前为止我尝试了什么 我尝试按照此处提供的用于测试“嵌套文件夹”的示例: https://github.com/cypress-io/cypress-test-nested-projects

package.json:添加了以下脚本:

  "scripts": 
    "test": "echo \"Error: no test specified\" && exit 1",
    "smhw-qa": "cypress run --project ./cypress/integration/apps/smhw-qa"
  ,

当我像这样通过终端运行它时:

➜  cypress-automation npx cypress run --project ./cypress/integration/apps/smhw-qa

我收到一个错误:

Can't run because no spec files were found.

We searched for any files inside of this folder:

/Users/jaswindersingh/Documents/cypress-automation/cypress/integration/apps/smhw-qa/cypress/integration

我错过了什么吗?我的cypress.json 文件是否应该位于其他位置?

我希望能够将“apps”中的每个文件夹设置为项目,然后能够使用cypress run --project 命令运行这些项目。

这也将使我在连接我们的 CI 时更容易运行特定的测试文件夹,以便在我选择时仅运行特定的项目(及其规范文件)。

【问题讨论】:

--project 标志用于指向您的cypress.json 位于不同的目录中。我不使用它,但这就是我从这里的文档中了解到的:docs.cypress.io/guides/guides/… How to group together certain tests or files when doing a run in Cypress?的可能重复 看到这个很好的答案:***.com/questions/60119398/… 【参考方案1】:

在我的情况下,我有一个包含多个项目的角度工作区,我在这个子项目中移动了 cypress 文件夹和 cypress.json 文件,例如./projects/app1

然后在配置文件中添加"integrationFolder": "e2e/cypress/integration",指定测试目录。

将这些脚本添加到 package.json

cypress open --project ./projects/app1

cypress run --project ./projects/app1

并且只执行或打开来自e2e/cypress/integration 目录的测试。

【讨论】:

【参考方案2】:

我想你在找--spec path/to/folder/*.js

您可以在一个文件夹中运行所有测试,甚至可以在一个文件夹的所有子文件夹中运行,

例如/npx cypress run --spec cypresss/integration/subsetA/**/*-spec.js

将在 cypress/integration 的“subsetA”文件夹下的所有文件夹中运行所有 .js 规范。

所以在你的情况下:npx cypress run --spec cypress/integration/apps/smhw-qa/**/*-spec.js 应该可以解决问题。

https://docs.cypress.io/guides/guides/command-line.html#How-to-run-commands

【讨论】:

不要忘记使用“(双引号)来指定文件名。例如npx cypress run --spec "cypress/integration/apps/smhw-qa/**/*-spec.js"。否则它可能无法正常工作(对我来说它在linux管道上运行它失败了,即使在我的 Windows 本地机器一开始工作:) ) @notihs 我怀疑这取决于谁扩展了**。在您的 linux 案例中,它可能是 shell,因此 npx 命令“看到”了多个传递给它的文件;在 Windows 中,shell 不这样做,所以 npx "看到" "**" 并根据需要扩展它。

以上是关于如何通过将赛普拉斯指定为项目来运行特定的测试文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

如何将环境变量添加到服务器,由赛普拉斯测试运行?

赛普拉斯 - 如何按顺序运行测试文件

如何使用赛普拉斯测试文件输入?

赛普拉斯可以运行在赛普拉斯文件夹之外导入的测试文件吗?

使用赛普拉斯,我将如何编写一个简单的测试来检查页面上是不是存在徽标图像

如何将地图对象设置为赛普拉斯结果 json 文件