为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 VSCode 在 docker 容器上更好地运行 phpunit

如何从 VSCode 在 docker 容器上更好地运行 phpunit

PHP
沧海一幻觉 2023-09-08 18:20:06
我正在尝试使用更好的 phpunit 扩展从 vs code 在 docker 容器上运行 php 单元测试,但我无法让它工作。到目前为止我所拥有的:-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:            - laraboardnetworks:    laraboard:volumes:    db_data:设置.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:-<?phpnamespace 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 运行时执行失败:执行失败:container_linux.go:346: 启动容器进程导致“执行格式错误”:未知终端进程“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'" 终止,退出代码:126。我哪里错了?
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这使我找到了解决方法,我已接受他的答案,但仍想扩展它:-


我已经找到了解决方法,但仍然觉得必须有更好的方法,因为它仍然存在问题:-


第一个问题是我在 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


运行测试后,我注意到颜色不再起作用,所以我添加了:-


"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,它们不会失败。我仍然需要一个更好的解决方案,但目前上述解决方案可以满足我的需求,我只是将其用作运行单个测试然后手动测试套件的快速方法。


查看完整回答
反对 回复 2023-09-08
  • 1 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信