Mockery似乎没有正常工作

时间:2014-03-24 17:12:43

标签: php laravel phpunit mockery

我正在尝试使用Mockery来确定我的控制器是否被正确调用。

我从我的测试用例中调用该函数,该方法正确返回。但是,Mockery似乎没有接到这个电话。

我尝试使用$ this-> call和$ this-> client->请求进行通话。两个调用都返回结果,因此Mockery应该计算对控制器的调用。

public function testIndex()
{

  /**$entity = \Entity\Classes\Entity::get();
  var_dump($entity);    **/ 
  //This works, and is returning all the entities for that entity

  $headers = array();

  $mock = Mockery::mock('\Entity\Classes\Entity');

  $mock->shouldReceive('index')->once();

  $crawler = $this->custom_request('GET', '/entity/entities/114', $headers); 

  //echo $response = $this->client->getResponse()->getContent();
  //This also works, so the call is being made. custom_request calls $this->client->request method 

  //$this->call('GET', 'http://myurl:1000/entity/entities/114');
      //This alternate method to make the call also work

  $this->assertResponseOk();

}

错误:

1) ClassTest::testIndex
Mockery\Exception\InvalidCountException: Method index() from       
Mockery_0_Entity_Classes_Entity should be called
 exactly 1 times but called 0 times.

1 个答案:

答案 0 :(得分:2)

通常你会将模拟注入某个东西,现在它只是坐在你的测试方法中而不被使用。如果您正在使用Laravel,您需要使用模拟替换IoC容器中的实际Entity\Classes\Entity,或者如果Entity\Classes\Entity::index是静态方法,则需要使用别名模拟,但我不想不推荐,这是一堆蠕虫。

编辑:

在此页https://github.com/padraic/mockery/blob/master/docs/05-QUICK-REFERENCE.md上搜索别名模拟的“别名:”。请注意,您可能希望运行使用别名模拟与phpunit进程隔离的测试。