CircleCI 错误您的测试可能会对此 'baseUrl' 发出请求,如果您不启动服务器,这些测试将失败

CircleCI error your tests likely make requests to this 'baseUrl' and these tests will fail if you don't boot your server

我正在 运行使用 Cypress.io 和 CI 使用 circleCI.

进行集成测试的 Angular 2+ 应用程序

我借鉴了 here 提供的教程,用于设置带有圆 Angular 的项目 CI,但还需要将柏树球体添加到 运行柏。所以我最终得到了以下 config.yml 脚本:

version: 2.1
orbs:
  cypress: cypress-io/cypress@1.0.1
jobs:
  build:
    working_directory: ~/project
    docker:
      - image: angular/ngcontainer
    steps:
      - checkout
      - run:
          name: Show current branch
          command: |
            echo ${CIRCLE_BRANCH}
            echo $fireBaseApiKey
      - restore_cache:
          keys:
            - v1-dependencies-{{checksum "package.json"}}
            - v1-dependencies-
      - run:
          name: Install local dependencies
          command: |
            npm install
      - save_cache:
          key: v1-dependencies-{{checksum "package.json"}}
          paths:
            - node_modules
      - run:
          name: Building
          command: npm run build
      - save_cache:
          key: v1-dist-{{ .Environment.CIRCLE_BRANCH}}-{{ .Environment.CIRCLE_SHA1}}
          paths:
            - dist
workflows:
  version: 2.1
  build:
    jobs:
      - build
      - cypress/install:
          requires:
            - build
          build: 'npm run build'
          context: fireBaseApiKey
      - cypress/run:
          requires:
            - cypress/install
            - build
          start: 'npm start'
          context: fireBaseApiKey

当 circleCI 启动时,工作流程的前两个作业成功(构建和 cypress/install),但 cypress/run 产生以下错误:

Cypress could not verify that the server set as your 'baseUrl' is running:

http://localhost:4200

您的测试可能会对此 'baseUrl' 提出请求,并且这些测试将 如果您不启动服务器,则会失败。

请启动此服务器,然后再次 运行 Cypress。

我猜我没有使用 npm run build 命令启动服务器。

我尝试添加:

- run:
          name: start ng server
          command: ng serve

在 "build" 作业中,但错误是:

/bin/bash: ng: command not found

我试图在 dockerhub 上找到一个可以执行 ng 命令的 docker 容器,"angular/ngcontainer" 似乎是一个不错的选择,因为使用 circleci/node:6.10-browsers因为我的 docker 教程中的图像 link 也无法识别 ng 命令。

我想我大部分时间都超出了我的理解范围,无法找到使用 Cypress 和 运行s [=62= 的 Angular 项目的示例] 在圆CI 上。有这样一个例子可能会在帮助事情变得有意义方面大有帮助。在那之前,有没有人对我如何执行像 ng serve 这样的命令有任何建议,你认为这会解决我的服务器无法启动错误吗?

2019 年 2 月 3 日更新19:34:

我根据网上朋友的建议进一步研究 the cypress orb usage 后添加了 wait-on。因此,我更新的 -cypress/run 命令为:

...
- cypress/run:
          requires:
            - cypress/install
            - build
          start: 'npm start'
          wait-on: 'http://localhost:4200'
          context: fireBaseApiKey

这似乎在等待一个永远不会发生的“http://localhost:4200”。

我想我可以帮助解决 ng command not found 问题。

您需要在开发依赖项中安装 angular cli:

npm install --save-dev @angular/cli@latest

然后在 npm install 运行你的脚本后 ng 将存在,所以你可以添加你的 ng serve 步骤来启动你的服务器。

虽然我认为这不适用于您,但当我在谷歌上搜索我的问题时,确实弹出了这个问题。因此,如果其他人有类似的问题,这就是我的工作方式。

为了让一些 NPM 包在我们的环境中工作,我需要使用我们的公司代理并通过我的 Jenkins 管道中的 HTTP_PROXYHTTPS_PROXY 环境变量进行设置。经过一些调试后,注意到 cypress 正试图对代理做一些事情。一旦我设置 NO_PROXY = localhost 柏树连接,成功!

这里实际上有几个问题:

  1. 看来我需要使用 http-get 而不是 http。所以:wait-on: 'http-get://localhost:4200'
  2. 我的环境变量仍然存在一些问题,有人询问并回答了这些问题

所以,最终的配置文件看起来像:

version: 2.1
orbs:
  cypress: cypress-io/cypress@1.5.1
jobs:
  build:
    working_directory: ~/project
    docker:
      - image: circleci/node:9.6.1-browsers
    environment:
      circleCiApiKey: fireBaseApiKey
    steps:
      - checkout
      - run:
          name: Show current branch
          command: |
            echo ${CIRCLE_BRANCH}
            ls -larth
            echo $fireBaseApiKey
            cat src/app/api-keys.ts
            sed -i "s/circleCiApiKey/$fireBaseApiKey/g" src/app/api-keys.ts
            cat src/app/api-keys.ts
      - restore_cache:
          keys:
            - v1-dependencies-{{checksum "package.json"}}
            - v1-dependencies-
      - run:
          name: Install local dependencies
          command: |
            npm install
      - save_cache:
          key: v1-dependencies-{{checksum "package.json"}}
          paths:
            - node_modules
      - run:
          name: Building
          command: npm run build
      - save_cache:
          key: v1-dist-{{ .Environment.CIRCLE_BRANCH}}-{{ .Environment.CIRCLE_SHA1}}
          paths:
            - dist
workflows:
  version: 2.1
  build:
    jobs:
      - build
      - cypress/install:
          requires:
            - build
          build: 'npm run build'
      - cypress/run:
          requires:
            - cypress/install
            - build
          start: 'npm start'
          store_artifacts: true
          wait-on: 'http-get://localhost:4200'

sed 语句中引用的 api-key.ts 文件看起来像:

export var masterFirebaseConfig = {
    apiKey: "circleCiApiKey",
    authDomain: "dataJitsu.firebaseapp.com",
    databaseURL: "https://datajitsu.firebaseio.com",
    storageBucket: "",
    messagingSenderId: "495992924984"
  };

export var masterStripeConfig = {
  publicApiTestKey: "pk_test_NKyjLSwnMosdX0mIgQaRRHbS",
  secretApiTestKey: "sk_test_6YWZDNhzfMq3UWZwdvcaOwSa",
  publicApiKey: "",
  secretApiKey: ""
};