インターネットを見渡しながらも、私の問題に対する答えは見つからないようです。私はPHPUnitとMockeryを使ってLaravelのコントローラをテストしています。しかし、私はEloquentベースのモデルが正しく嘲笑されていないようです。私はAuth :: user()を同じ方法でモックすることができましたが、これは以下のテストでは使用されていません。試験される必要があるAddressControllerでLaravel 5 - モクリーを使って擬似モデルを模擬する
機能:
public function edit($id)
{
$user = Auth::user();
$company = Company::where('kvk', $user->kvk)->first();
$address = Address::whereId($id)->first();
if(is_null($address)) {
return abort(404);
}
return view('pages.address.update')
->with(compact('address'));
}
セットアップおよびモック方法を含むControllerTest
abstract class ControllerTest extends TestCase
{
/**
* @var \App\Http\Controllers\Controller
*/
protected $_controller;
public function setUp(){
parent::setUp();
$this->createApplication();
}
public function tearDown()
{
parent::tearDown();
Mockery::close();
}
protected function mock($class)
{
$mock = Mockery::mock($class);
$this->app->instance($class, $mock);
return $mock;
}
}
AddressControllerTest ControllerTest
class AddressControllerTest extends ControllerTest
{
/**
* @var \App\Models\Address
*/
private $_address;
/**
* @var \App\Http\Controllers\AddressController
*/
protected $_controller;
public function setUp(){
parent::setUp();
$this->_controller = new AddressController();
$this->_address = factory(Address::class)->make();
}
public function testEdit404(){
$companyMock = $this->mock(Company::class);
$companyMock
->shouldReceive('where')
->with('kvk', Mockery::any())
->once();
->andReturn(factory(Company::class)->make([
'address_id' => $this->_address->id
]));
$addressMock = $this->mock(Address::class);
$addressMock
->shouldReceive('whereId')
->with($this->_address->id)
->once();
->andReturn(null);
//First try to go to route with non existing address
$this->action('GET', '[email protected]', ['id' => $this->_address->id]);
$this->assertResponseStatus(404);
}
}
を延ばすことが投球を保持エラーです。
1) AddressControllerTest::testEdit404
Mockery\Exception\InvalidCountException: Method where("kvk", object(Mockery\Matcher\Any)) from Mockery_1_Genta_Models_Company should be called exactly 1 times but called 0 times.
おそらく誰でも考えがありますか?
私のコントローラメソッドがすべてで呼ばれましたし、それが交換後にやったかどうかをチェックしながらの$ this - >アクション()メソッドでの$ this - >()メソッドの呼び出しを置き換え。しかし、問題は続く。 –