2015-12-02 57 views
3

我有一些为Laravel 5.1应用程序编写的测试,我目前使用PHPUnit来运行测试。我试图调查代码,因为我们有其他的应用程序不是建立在Laravel上的,所以代码看起来像是获得类似的测试接口的最简单的方法。使用Codeception运行现有的Laravel 5.1 PHPUnit测试

我们有一个相当大的团队,所以我宁愿使用一个统一的命令在所有项目中进行测试,而不是使用codecept,有些使用phpunit

这里就是我试过我的codeception.yml

actor: Tester 
paths: 
    tests: tests 
    log: storage/codeception/_output 
    data: storage/codeception/_data 
    support: storage/codeception/_support 
    envs: storage/codeception/_envs 

modules: 
    enabled: 
     - Laravel5: 
      environment_file: .env 

但我得到这样的回应:

$ codecept run 
Codeception PHP Testing Framework v2.1.4 
Powered by PHPUnit 4.8.18 by Sebastian Bergmann and contributors. 

    [RuntimeException]   
    Suite '' could not be found 

所以我的问题是这样的:

怎么办我说服codence以尽可能少的修改来运行我现有的PHPUnit测试?

回答

3

经过很长时间,我发现它是可能的,但是你必须对你的测试布局进行一些修改。但是,奖金是它不会阻止你仅仅运行PHPUnit本身。

对于后人,这里是如何做到这一点:

  1. 将单元测试和TestCase.php成的tests文件夹下的文件夹unit

应该是这样的:

tests/ 
tests/unit/ 
tests/unit/MyUnitTest.php 
tests/unit/TestCase.php 
  • 添加unit.suite.yml文件中的文件夹tests/
  • 的内容应该是这样的:

    modules: 
        enabled: 
         - Laravel5: 
          environment_file: .env.testing 
    
  • 更新您的composer.json到与测试类映射正确的文件夹
  • 在你autoload-dev部分:

    "classmap": [ 
        "tests/unit/TestCase.php" 
    ] 
    
    1. 更新您的TestCase.php以从正确的文件夹加载bootstrap.php

    这应该是在createApplication()方法在TestCase.php

    public function createApplication() 
    { 
        // $app = require __DIR__ . '/../bootstrap/app.php'; 
        $app = require __DIR__ . '/../../bootstrap/app.php'; 
    
        $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); 
    
        return $app; 
    } 
    

    最后顶部,运行composer dump-autoload和codeception应该运行。作为奖励,phpunit也应该运行。

    +0

    不错的工作!这对我帮助很大! –

    相关问题