为什么在yii2框架的根目录中有文件夹测试?

时间:2018-03-15 10:02:34

标签: yii2 phpunit codeception

这是基本模板。 我使用此命令生成测试文件并运行:

$ ./vendor/bin/codecept generate:test unit Example
$ ./vendor/bin/codecept run

此文件显示在文件夹/ vendor / bin / tests / unit中。 我无法将此文件推送到GitHub。 为什么测试文件出现在vendor文件夹中?我该怎么做才能使测试文件保存在项目根目录下的tests文件夹中?

1 个答案:

答案 0 :(得分:2)

您需要调试路径并解决导致此问题的配置问题。

使用的路径在文件的第45行设置:vendor/codeception/base/src/Codeception/Command/GenerateTest.php

在那里你会看到这段代码,它创建了新目录:

$path = $this->createDirectoryFor($config['path'], $class);

$config['path']的值在方法suiteSettings中确定,文件vendor/codeception/base/src/Codeception/Configuration.php中的第285行

在这里,您将看到此代码,它设置配置的路径:

    $settings['path'] = self::$dir . DIRECTORY_SEPARATOR . $config['paths']['tests']
        . DIRECTORY_SEPARATOR . $settings['path'] . DIRECTORY_SEPARATOR;

在这两行之前添加以下代码:

    echo 'self::$dir ' . print_r(self::$dir, true) . PHP_EOL;
    echo '$config[paths][tests] ' . print_r($config['paths']['tests'], true) . PHP_EOL;
    echo '$settings[path] ' . print_r($settings['path'], true) . PHP_EOL;
    exit;

现在,再次运行命令以执行此调试代码:

./vendor/bin/codecept generate:test unit Example

对于我的设置,即使用与您相同的命令在<system_root>/public_html/basic/tests/unit/ExampleTest.php生成测试,我看到以下内容:

  • self::$dir =&gt; <system_root>/public_html/basic
  • $config[paths][tests] =&gt; tests
  • $settings[path] =&gt; unit

观察 - 从您的评论中我看到您的codeception.yml文件是正确的,其中包含各种测试子目录的默认值。

建议

在您的情况下,

$config[paths][tests]似乎是错误的 - 根据您的调查结果调试并解析路径配置。

请注意,供应商包中有一个核心codeception.yml,并且应用程序根目录中也应该有一个,即

  • <system_root>/public_html/basic/vendor/codeception/base/codeception.yml

  • <system_root>/public_html/basic/codeception.yml

后者的值优先!