在 Docker 中运行 Vue 测试

问题描述 投票:0回答:2

我有一个 Dockerfile

FROM node:19-bullseye-slim

WORKDIR /app
# Install prerequisites
RUN apt-get update && apt-get install -y \
gnupg \
curl \
bash 

COPY . /app

CMD ./bootstrap.sh

和一个 bash 脚本

#!/bin/bash

npm add yarn 
yarn add pm2 ---dev
yarn install
npx playwright install-deps chromium
yarn test
echo "Finished"

命令

  1. 安装纱线,

  2. 从我的应用程序安装依赖项,

  3. 安装剧作家铬浏览器

  4. 运行一个测试命令,它在我的 package.json 文件中作为“测试”

     "test": "pm2 start server.js && npm run test:cucumber",
    

    "test:cucumber": "cucumber-js --require ./cucumber.js --require ./tests/e2e-playwright/step-definitions/**/*.js -f json:cucumber_report.json --publish -安静”,

该命令应该启动 vue 的开发服务器,然后运行黄瓜测试

我的server.js文件是

module.exports  = {
    apps: [
      {
        name: "WEB",
        script: "./node_modules/@vue/cli-service/bin/vue-cli-service.js",
        args: "serve"
      }
    ]

};

pm2 启动 server.js ,调用 vue-cli-service serve(启动 vue dev-server)

但是 vue dev 服务器没有启动,我的测试失败,因为应用程序不可用

如果我运行 vue-cli-service serve 一切都按预期工作,并且该网站位于 http:localhost:8080

有人能告诉我如何让 pm2 运行服务器并且它可用吗? 有人可以告诉我是否可以运行我的测试并连接到 Docker 容器中的端口 8080,或者我必须将我的测试指向使用 host.docker.internal 吗?我该怎么做?

谢谢

docker vue.js pm2
2个回答
0
投票

请确保您正在运行服务器并测试 concurrently,例如使用 '&' 或 https://www.npmjs.com/package/concurrently

"test": "pm2 start server.js && npm run test:cucumber"
似乎是先启动服务器,然后等待服务器退出,然后才尝试进行 statr 测试。

基本上,在将其放入容器之前尝试在您自己的 PC 上运行相同的命令(或相同的 bash)

还有,

  • 你的
    yarn add pm2 ---dev
    说话
    --dev
    不正确
  • cucumber 可能是一个测试依赖,所以你可能没有安装它
  • 您可以使用
    NODE_ENV=production
    yarn install --production=false
    中安装开发依赖项,您可能需要它
  • node@>=16 container iirc默认提供yarn

0
投票

要让 PM2 运行服务器并使其可用,您需要指定服务器将侦听的端口。您可以通过将以下行添加到您的 server.js 文件来执行此操作:

  module.exports = {
  apps: [
    {
      name: "WEB",
      script: "./node_modules/@vue/cli-service/bin/vue-cli-service.js",
      args: "serve",
      env: {
        PORT: 8080
      }
    }
  ]
};

这将告诉 PM2 在端口 8080 上启动开发服务器。然后,在您的 Dockerfile 中,您需要通过添加以下行来公开此端口:

EXPOSE 8080

这将允许其他容器或主机连接到运行您的开发服务器的容器。

要运行测试并连接到在 Docker 容器内运行的开发服务器,您应该使用容器的 IP 地址而不是本地主机。您可以通过运行以下命令找到容器的 IP 地址:

docker inspect <container-name-or-id> | grep IPAddress

替换为您容器的名称或 ID。

或者,您可以使用特殊主机名 host.docker.internal 从 Docker 容器内部连接到主机上运行的服务。所以你可以修改你的 package.json 文件来指定开发服务器的 URL 为http://host.docker.internal:8080.

"test": "pm2 start server.js && npx wait-on http://localhost:8080 && npm run test:cucumber",

这将等到开发服务器可用后再运行测试。

© www.soinside.com 2019 - 2024. All rights reserved.