这个问题问了好几次,但我尝试了所有的解决方案,我发现并有一个运行“正常”phpunit测试与类似的设置,所以不是我做的每件事都可能是错误的。
问题是:
我知道,与gitlab ci和docker一起出现此问题的主要原因(仅报告?)是使用了错误的主机。在几乎所有情况下,op都会尝试某种本地主机来访问db。
这里不能这样因为 DB_HOST
在我的 variables
, DB_HOST
在我的 .env
文件和mysql服务的别名都是一样的。
我甚至钩入容器(通过添加 sleep 1h
就在黄昏前指挥并做一个 docker exec
)并成功地登录到我的数据库,并看到迁移和种子表。小叮当也能锻炼。
唯一的问题是黄昏。
有趣的事实:抛弃我的 DB_HOST
给予 mysql-test
(我做了一个 config:clear
在运行黄昏之前,甚至把它添加到我的 setUp
功能。
我真的没什么主意了,希望能从人群中得到一些主意。
这是我的.yml文件
stages:
- build
- test
variables:
DB_HOST: mysql-test
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: secret
DB_CONNECTION: mysql
composer:
image: lorisleiva/laravel-docker:latest
stage: build
script:
- composer install --no-progress --no-interaction
- cp .env.gitlab-testing .env
- php artisan key:generate
artifacts:
paths:
- vendor/
- bootstrap/
- .env
cache:
key: ${CI_BUILD_REF_NAME}
paths:
- vendor/
tags:
- docker
npm:
image: lorisleiva/laravel-docker:latest
stage: build
script:
- npm install
- npm run prod
artifacts:
paths:
- public/mix-manifest.json
cache:
key: ${CI_BUILD_REF_NAME}
paths:
- node_modules/
tags:
- docker
dusk:
stage: test
dependencies:
- composer
- npm
tags:
- docker
cache:
key: ${CI_BUILD_REF_NAME}
paths:
- vendor
- node_modules
policy: pull
services:
- name: mysql:5.7
alias: mysql-test
image: chilio/laravel-dusk-ci:latest
script:
- cp .env.dusk.gitlab-testing .env
- cp phpunit.dusk.xml phpunit.xml
- configure-laravel
- start-nginx-ci-project
- php artisan dusk --colors --debug
artifacts:
paths:
- ./storage/logs
- ./tests/Browser/screenshots
- ./tests/Browser/console
expire_in: 7 days
when: always
.env.dusk.gitlab-测试
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
LOG_CHANNEL=stack
HEADLESS=true
DB_CONNECTION=mysql
DB_HOST=mysql-test
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=secret
BROADCAST_DRIVER=log
CACHE_DRIVER=array
SESSION_DRIVER=array
QUEUE_DRIVER=sync
phpunit.dusk.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Browser Tests">
<directory suffix="Test.php">./tests/Browser</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<env name="APP_ENV" value="local"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
</php>
</phpunit>
1条答案
按热度按时间ttvkxqim1#
它现在确实起作用了。
以下是我的文件现在的样子:
.env.dusk.gitlab-测试:
.gitlab-ci.yml公司
我想,是因为它错过了
MYSQL_PASSWORD
中的变量.yml
但我不是100%确定。很高兴它现在起作用了。