【问题标题】:Howto run better phpunit on a docker container from VSCode如何在 VSCode 的 docker 容器上运行更好的 phpunit
【发布时间】:2020-11-20 03:58:39
【问题描述】:

我正在尝试使用更好的 phpunit 扩展从 vs 代码在 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:
            - 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 运行时执行失败:执行失败:container_linux.go:346: 启动容器进程导致“exec格式错误”:未知 终端进程“C:\Windows\System32\cmd.exe /d /c docker exec laraboard_php_1 /var/www/html/vendor/bin/phpunit.bat /var/www/html/tests/Feature/ThreadsT​​est.php --filter '^.*::a_user_can_browse_threads'" 以退出代码终止:126。

我哪里出错了?

【问题讨论】:

    标签: php docker visual-studio-code phpunit


    【解决方案1】:

    这里的问题可能是 phpunit 可执行文件的路径错误。应该是/var/www/html/vendor/bin/phpunit 而不是/var/www/html/vendor/bin/phpunit.bat

    【讨论】:

    • 感谢您的帮助,这是问题的一部分,但问题不止一个,我在下面扩展了您的答案
    【解决方案2】:

    @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添加一个新问题

    运行测试后,我注意到颜色不再起作用,所以我补充说:-

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 2016-02-04
      • 2015-10-09
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多