【问题标题】:Cannot redeclare ::shouldReceive() when testing Facade测试 Facade 时无法重新声明 ::shouldReceive()
【发布时间】:2014-02-25 12:57:13
【问题描述】:

根据Laravel docs,我应该可以通过Object::shouldReceive() 模拟外观,但是当我这样做时,我无法重新声明该方法。当我在浏览器中查看该视图时,它可以正常工作,我只需要弄清楚如何正确测试它。

Cannot redeclare Mockery_1_Facades_MyService::shouldReceive() in /path-to-project/vendor/mockery/mockery/library/Mockery/Loader/EvalLoader.php(16) : eval()'d code on line 672

这是我的测试:

public function testSend()
{
    MessageService::shouldReceive('find')->once()->with(1);

    $this->call('GET', '/message/1/send');

    $this->assertRedirectedToRoute('message.index');
}

这是我的控制器:

public function send($id)
{
    $message = MessageService::find($id);
    $this->messageService->sendBroadcast($message);

    return Redirect::route('message.index')
        ->with('message', "Sending message: {$message->name}, stand by...");
}

【问题讨论】:

    标签: php unit-testing laravel facade


    【解决方案1】:

    您正在尝试模拟已模拟的课程。看看你是否在某个地方注册了你的服务作为门面——Laravel 有很多自动生成的默认值,这很难注意到。这是一个外观 shouldReceive 方法:

    public static function shouldReceive()
        {
        $name = static::getFacadeAccessor();
    
        if (static::isMock())
        {
            $mock = static::$resolvedInstance[$name];
        }
        else
        {
            $mock = static::createFreshMockInstance($name);
        }
    
        return call_user_func_array(array($mock, 'shouldReceive'), func_get_args());
        }
    

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 2012-06-27
      • 2015-09-12
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      相关资源
      最近更新 更多