如何 运行 在来自 VSCode 的 docker 容器上使用更好的 phpunit
Howto run better phpunit on a docker container from VSCode
我正在尝试 运行 php 使用更好的 php 单元扩展对来自 vs 代码的 docker 容器进行单元测试,但我无法让它工作.
我目前拥有的:-
docker-compose.yml:-
version: '3.1'
services:
php:
build:
context: .
dockerfile: .docker/Dockerfile
image: laraboard
ports:
- 8000:80
restart: always
volumes:
- .:/var/www/html
networks:
- laraboard
mysql:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
restart: always
ports:
- 3306:3306
environment:
MYSQL_DATABASE: laraboard
MYSQL_USER: root
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
networks:
- laraboard
phpmyadmin:
depends_on:
- mysql
image: phpmyadmin/phpmyadmin
restart: always
ports:
- 8001:80
environment:
PMA_HOST: mysql
MYSQL_ROOT_PASSWORD: password
networks:
- laraboard
networks:
laraboard:
volumes:
db_data:
settings.json:-
"better-phpunit.docker.enable": true,
"better-phpunit.docker.command": "docker exec laraboard_php_1",
"better-phpunit.docker.paths": {
"c:/Users/Chris/Web/laraboard": "/var/www/html"
}
ThreadTest.php:-
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ThreadsTest extends TestCase
{
/** @test */
public function a_user_can_browse_threads()
{
$response = $this->get('/threads');
$response->assertStatus(200);
}
}
使用此设置我得到错误:-
OCI runtime exec failed: exec failed: container_linux.go:346:
starting container process caused "exec format error": unknown
The terminal process "C:\Windows\System32\cmd.exe /d /c docker exec laraboard_php_1 /var/www/html/vendor/bin/phpunit.bat
/var/www/html/tests/Feature/ThreadsTest.php --filter
'^.*::a_user_can_browse_threads'" terminated with exit code: 126.
我哪里错了?
这里的问题可能是 phpunit 可执行文件的路径错误。它应该是 /var/www/html/vendor/bin/phpunit
而不是 /var/www/html/vendor/bin/phpunit.bat
@Florian Engelhardt partyl 回答了我的问题,这让我找到了解决方法,我已经接受了他的回答,但仍想扩展它:-
我已经找到了解决方法,但仍然觉得必须有更好的方法,因为它仍然存在问题:-
第一个问题是我在 docker.command 中使用容器名称而不是服务名称,我需要输入 bash:
"better-phpunit.docker.command": "docker exec php bash",
然后我不得不按照@Florian Engelhardt 的建议更改 phpunit 二进制文件:-
"better-phpunit.phpunitBinary": "${workspaceFolderBasename}/vendor/bin/phpunit",
这现在停止给出错误并显示 phpunit 帮助,所以我知道我正在取得进展。
然后我不得不更改套件命令(我不知道为什么,但这也修复了单个测试 运行):-
"better-phpunit.suiteSuffix": "/var/www/${workspaceFolderBasename}/tests",
上面简单地告诉 phpunit 测试 laravel 测试目录中的所有内容,我希望它使用 phpunit.xml 配置文件但无法让它工作,我试过 "/var/www/${workspaceFolderBasename}"
正如文档所说,如果没有找到配置,它将自动拉入 .xml 但它没有,我已经尝试 "/var/www/${workspaceFolderBasename}/phpunit.xml"
但这只是试图测试 .xml.无论如何,上述解决方法有效,也许我会为 phpunit.xml
添加一个新问题
完成测试后 运行ning 我注意到颜色不再有效,所以我添加了:-
"better-phpunit.commandSuffix": "--colors=auto"
我的 settings.json 现在看起来像:-
"better-phpunit.docker.enable": true,
"better-phpunit.docker.command": "docker-compose exec workspace bash",
"better-phpunit.docker.paths": {
"${workspaceFolder}": "/var/www/${workspaceFolderBasename}"
},
"better-phpunit.phpunitBinary": "${workspaceFolderBasename}/vendor/bin/phpunit",
"better-phpunit.suiteSuffix": "/var/www/${workspaceFolderBasename}/tests",
"better-phpunit.commandSuffix": "--colors=auto"
现在开始讨论问题,而测试 运行,到目前为止,我发现任何测试带有 POST 请求的表单的测试都会由于 CSRF 令牌不匹配而失败,而它们确实如此如果我手动 运行 phpunit 不会失败。我仍然需要一个更好的解决方案,但现在上面的解决方案正在满足我的需求,我只是将它用作 运行 单个测试然后手动测试套件的快速方法。
我正在尝试 运行 php 使用更好的 php 单元扩展对来自 vs 代码的 docker 容器进行单元测试,但我无法让它工作.
我目前拥有的:-
docker-compose.yml:-
version: '3.1'
services:
php:
build:
context: .
dockerfile: .docker/Dockerfile
image: laraboard
ports:
- 8000:80
restart: always
volumes:
- .:/var/www/html
networks:
- laraboard
mysql:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
restart: always
ports:
- 3306:3306
environment:
MYSQL_DATABASE: laraboard
MYSQL_USER: root
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
networks:
- laraboard
phpmyadmin:
depends_on:
- mysql
image: phpmyadmin/phpmyadmin
restart: always
ports:
- 8001:80
environment:
PMA_HOST: mysql
MYSQL_ROOT_PASSWORD: password
networks:
- laraboard
networks:
laraboard:
volumes:
db_data:
settings.json:-
"better-phpunit.docker.enable": true,
"better-phpunit.docker.command": "docker exec laraboard_php_1",
"better-phpunit.docker.paths": {
"c:/Users/Chris/Web/laraboard": "/var/www/html"
}
ThreadTest.php:-
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ThreadsTest extends TestCase
{
/** @test */
public function a_user_can_browse_threads()
{
$response = $this->get('/threads');
$response->assertStatus(200);
}
}
使用此设置我得到错误:-
OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec format error": unknown The terminal process "C:\Windows\System32\cmd.exe /d /c docker exec laraboard_php_1 /var/www/html/vendor/bin/phpunit.bat /var/www/html/tests/Feature/ThreadsTest.php --filter '^.*::a_user_can_browse_threads'" terminated with exit code: 126.
我哪里错了?
这里的问题可能是 phpunit 可执行文件的路径错误。它应该是 /var/www/html/vendor/bin/phpunit
而不是 /var/www/html/vendor/bin/phpunit.bat
@Florian Engelhardt partyl 回答了我的问题,这让我找到了解决方法,我已经接受了他的回答,但仍想扩展它:-
我已经找到了解决方法,但仍然觉得必须有更好的方法,因为它仍然存在问题:-
第一个问题是我在 docker.command 中使用容器名称而不是服务名称,我需要输入 bash:
"better-phpunit.docker.command": "docker exec php bash",
然后我不得不按照@Florian Engelhardt 的建议更改 phpunit 二进制文件:-
"better-phpunit.phpunitBinary": "${workspaceFolderBasename}/vendor/bin/phpunit",
这现在停止给出错误并显示 phpunit 帮助,所以我知道我正在取得进展。
然后我不得不更改套件命令(我不知道为什么,但这也修复了单个测试 运行):-
"better-phpunit.suiteSuffix": "/var/www/${workspaceFolderBasename}/tests",
上面简单地告诉 phpunit 测试 laravel 测试目录中的所有内容,我希望它使用 phpunit.xml 配置文件但无法让它工作,我试过 "/var/www/${workspaceFolderBasename}"
正如文档所说,如果没有找到配置,它将自动拉入 .xml 但它没有,我已经尝试 "/var/www/${workspaceFolderBasename}/phpunit.xml"
但这只是试图测试 .xml.无论如何,上述解决方法有效,也许我会为 phpunit.xml
完成测试后 运行ning 我注意到颜色不再有效,所以我添加了:-
"better-phpunit.commandSuffix": "--colors=auto"
我的 settings.json 现在看起来像:-
"better-phpunit.docker.enable": true,
"better-phpunit.docker.command": "docker-compose exec workspace bash",
"better-phpunit.docker.paths": {
"${workspaceFolder}": "/var/www/${workspaceFolderBasename}"
},
"better-phpunit.phpunitBinary": "${workspaceFolderBasename}/vendor/bin/phpunit",
"better-phpunit.suiteSuffix": "/var/www/${workspaceFolderBasename}/tests",
"better-phpunit.commandSuffix": "--colors=auto"
现在开始讨论问题,而测试 运行,到目前为止,我发现任何测试带有 POST 请求的表单的测试都会由于 CSRF 令牌不匹配而失败,而它们确实如此如果我手动 运行 phpunit 不会失败。我仍然需要一个更好的解决方案,但现在上面的解决方案正在满足我的需求,我只是将它用作 运行 单个测试然后手动测试套件的快速方法。