我正在使用Codeception + Selenium + PhantomJS编写测试。我遇到的问题是,我需要模拟不同的类,并在不同的测试中绑定不同的实现(有时模拟带有其方法返回的预定义结果的类)。
当使用PHPUnit编写单元测试时,这很容易:
$setterMock = Mockery::mock(MyClass::class);
$setterMock->shouldReceive('classMethod')
->andReturn('result');
$this->app->instance(MyClass::class, $setterMock);
但是在编写集成测试时,我不知道如何访问$app实例。我尝试在验收测试文件夹内的__bootstrap.php中应用类似的代码,但它不起作用。
对不起,你不能。
PhantomJS通过HTTP访问服务器,所以没有什么可以被嘲笑。
你可以通过使用Laravel5模块而不是Webdriver来实现模拟测试。