在Docker中运行Vue测试

z5btuh9x  于 2023-03-22  发布在  Docker
关注(0)|答案(1)|浏览(171)

bounty将在5天后过期。回答此问题可获得+500声望奖励。dorriz希望引起更多人关注此问题。

我有一个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.安装Yarn,
1.从我的应用程序安装依赖项,
1.安装剧作家 chrome 浏览器
1.运行package.json文件中的测试命令“test”

"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-quiet”,
该命令应该启动Vue的dev服务器,然后运行cucumber测试
我的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,那么一切都按预期运行,并且可以在http:localhost:8080上找到该网站
有人能告诉我如何让pm2运行服务器并且它将可用吗?有人能告诉我,如果我可以运行我的测试并连接到Docker容器中的端口8080,或者我必须将我的测试指向使用host.docker.internal?我该怎么做?
谢谢

pgky5nke

pgky5nke1#

问题似乎是PM2无法正确启动Vue dev服务器。其中一个可能的原因是PM2与Vue应用程序不在同一个工作目录中运行。
要解决这个问题,您可以更新server.js文件以包含cwd(当前工作目录)属性,如下所示:

module.exports = {
  apps: [
    {
      name: "WEB",
      script: "./node_modules/@vue/cli-service/bin/vue-cli-service.js",
      args: "serve",
      cwd: "/app" // change this to the path where your Vue app is located
    }
  ]
};

这会告诉PM2在/app目录中运行Vue应用程序(您可能需要更新此路径以匹配应用程序的位置)。
关于端口问题,如果你的Vue应用在Docker容器中的端口8080上运行,你应该可以通过使用http://localhost:8080从测试中访问它。
但是,这假设测试也在同一个容器中运行。如果测试在容器外部运行(例如,在主机上),则需要使用容器的IP地址而不是localhost。您可以通过运行
docker inspect <container-id> | grep IPAddress(替换为容器的实际ID)。
或者,您可以使用Docker的端口Map功能将容器中的端口8080Map到主机上的端口。例如,您可以像这样运行容器:

docker run -p 8080:8080 <image-name>

这将容器中的端口8080Map到主机上的端口8080,因此您应该能够使用http://localhost:8080从测试中访问Vue应用程序。

相关问题