我正在尝试向Node.js服务添加测试。
# package.json
"scripts": {
"start": "node src/server.js",
"dev": "nodemon src/server.js",
"test": "jest",
"test-watch": "jest --watchAll"
},
问题是,如果我使用test-watch
,它会停止skaffold管道。
apiVersion: skaffold/v4beta2
kind: Config
metadata:
name: microservices-quiz-app
build:
artifacts:
- image: auth-img
context: auth
docker:
dockerfile: Dockerfile
sync:
manual:
- src: src/**/*.js
dest: .
test:
- image: auth-img
context: auth
custom:
- command: npm run test-watch # !!!
manifests:
rawYaml:
- auth/k8s/*.yml
- ingress-srv.yml
运行test-watch
后,skaffold dev
卡住
Testing images...
Running custom test command: "npm run test-watch"
> auth@1.0.0 test-watch
> jest --watchAll
PASS src/tests/app.test.js
GET /
√ responds with a default message (69 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 3.372 s
Ran all test suites.
另一个问题是当我使用Google Cloud Build时,我得到npm not found
。
一个三个三个一个
(Is npm run test
没有在创建的Node容器中运行(使用auth-img
)?在cloudbuild.yaml中指定相同的镜像只是为了运行一些测试会很麻烦)
使用Skaffold进行测试的最佳方法是什么?起初,我将tests
文件夹放在src
之外,这样它们就不会同步并触发重建,但如果不向上滚动,很容易错过结果。
1条答案
按热度按时间vmdwslir1#
默认情况下,测试不会在容器中运行。我们可以显式地使用docker创建一个包含生成的
IMAGE
的容器。但是,在Windows中,我们需要用
%IMAGE%
替换$IMAGE
,所以我认为最好只将其用于持续集成,并在单独的终端窗口中本地运行npm run test-watch
。(可能有一种方法可以使用Docker映像执行connect,而不必在本地重新安装依赖项,但你可能负责一个微服务,所以这不是一个很大的麻烦。我发现有两个不同的Dockerfile和两个skaffold配置更简单。
skaffold.dev.yaml
skaffold.yaml
生产
skaffold.yaml
仍然需要构建开发映像,以便能够运行测试。Dockerfile.dev
停靠文件
生产Dockerfile通常是一个多阶段构建(不确定是否适用于nodejs服务器),例如使用React:
关于Golang:
您还可以使用开发映像作为生产映像的第一个阶段。