Обычно в модульных тестах методы amOnRoute
, amOnPage
не вызываются, поэтому Laravel5->doRequest()
не будет применять привязки, поэтому, чтобы смоделировать класс, в помощнике модулей из набора Codeception:
class Unit extends \Codeception\Module
{
/**
* @param $realClass
* @param $mock
*/
public function mockClass($realClass, $mock)
{
$this->getModule('Laravel5')->getApplication()->instance($realClass, $mock);
}
}
В модульном тесте:
class SomeClassCest
{
public function tryToTest(UnitTester $I)
{
$mock = Mockery::mock(MyClass::class);
$mock->shouldReceive('action')->once()->andReturn(true);
$I->mockClass(MyClass::class, $mock);
$classToTest = app(SomeClass::class);
// this method calls the MyClass action method
$classToTest->run();
// the mocked classs is used insetad of the real one
// do some asserts here
}
}