Laravel集成测试在作为一个类运行时抛出虚假404错误,单个测试工作正常

时间:2015-05-25 19:59:33

标签: laravel-5 integration-testing

我在L5.1中使用了新的集成测试。我在运行测试课时遇到了一些奇怪的错误 - 主要是在我测试的页面上有404个错误。奇怪的是,当我过滤到单独的测试时,测试通过很好。当我运行它所属的整个测试类或测试套件时,它失败了404.该路由在浏览器中工作,并且当我自己运行时测试通过,所以它显然不是有效的错误。

代码看起来像这样:

class MyTest extends \TestCase
{
use WithoutMiddleware;

public function __construct() {

    parent::__construct();

    $this->mock = m::mock('MyApp\Stuff\Repository');
    $this->validator = m::mock('Illuminate\Validation\Factory');
    $this->mockedClass = m::mock('MyApp\Stuff\Service');
}

/**
 * @test
 */
public function it_should_get_all_thingies() {
    $this->mockedClass->shouldReceive('someMethod')
        ->once()
        ->andReturn('yay');
    $this->app->instance('MyApp\Stuff\Service', $this->mockedClass);

    $this->visit('/api/v1/thingies');
   }
}

我跑的时候     phpunit --filter=it_should_get_all_thingies,它运作正常。 我跑的时候     phpunit --filter=MyTest,它以404结束。我可以将错误信息中的相关URL复制到浏览器中,并且工作正常。

我能想到的另一个相关事实是,这是从L4.2到5.0到5.1的更新。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:7)

找出触发错误的原因以及如何解决它。我正在拉这样的二级路线文件:

Route::get('/', function () {
return view('welcome');
});

Route::group(['prefix' => 'api/v1'], function() {
require_once_app_path(__DIR__ . '/routes2.php');

});

require_once_app_path会触发问题。在L4.2或L5.0中没有发生,当我们升级到5.1时启动。用require替换它似乎可以解决问题。