当我在laravel上使用mockery运行测试时,此错误消息:
Mockery \ Exception \ InvalidCountException:来自Mockery_0__Customer的方法findOrFail(1)应该被正确调用1次但是被调用0次
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
return $app;
}
protected function seeJsonValidFailedResponse()
{
print_r($this->response->getContent());
$this->assertEquals(400, $this->response->status());
return $this;
}
protected function seeJsonValidResponse()
{
print_r($this->response->getContent());
$this->assertEquals(200, $this->response->status());
return $this;
}
public function setUp()
{
parent::setUp();
}
public function tearDown()
{
parent::tearDown();
}
use Mockery;
class CustomerTest extends TestCase
{
use WithoutMiddleware;
public function testIndexSuccess()
{
$idCustomer= 1;
$mockCustomer = Mockery::mock('Customer');
$mockCustomer
->shouldReceive('findOrFail')
->once()
->with($idCustomer)
->andReturn(true);
$this->app->instance('Customer', $mockCustomer);
$this->get('/customer/history/' . $idCustomer)
->seeJsonValidResponse();
}
}
use App\Customer;
class CustomerController extends Controller
{
public function __construct(Customer $customer) {
$this->customerModel = $customer;
}
public function history($id)
{
$customer = $this->customerModel->findOrFail($id);
$issues = $customer->issues();
return view('customer/history', compact('customer', 'issues'));
}
}
答案 0 :(得分:0)
在定义mock时,应该为Customer类添加整个命名空间。所以改变这一行:
$mockCustomer = Mockery::mock('Customer');
到此:
$mockCustomer = Mockery::mock('App\Customer');