InvalidCountException:方法应该被调用1次,但被调用0次

时间:2016-08-26 17:30:01

标签: mockery laravel-5.3

当我在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();
}

CustomerTest

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'));
    }
}

1 个答案:

答案 0 :(得分:0)

在定义mock时,应该为Customer类添加整个命名空间。所以改变这一行:

$mockCustomer = Mockery::mock('Customer');

到此:

$mockCustomer = Mockery::mock('App\Customer');