PHP致命错误:调用未定义的方法Laravel \ Socialite \ Contracts \ Factory :: shouldReceive()

时间:2016-01-15 08:31:44

标签: php phpunit

我正在尝试使用我的应用程序中的facebook,twitter和github来测试我的社交身份验证。我使用了Socialte和Laravel 5.1。

以下是我尝试测试社交的方法:

use Laravel\Socialite\Contracts\Factory as Socialite;

class AuthTests extends TestCase
{
    public function testFb()
    {
        Socialite::shouldReceive('driver')->once()->with('facebook')->andReturn('code');
        $this->visit('/auth/login/facebook');
    }
}

但这从未成功运行,我不断收到此错误:

[Symfony\Component\Debug\Exception\FatalErrorException]Call to undefined method Laravel\Socialite\Contracts\Factory::shouldReceive()

我已经查看了我可以用来在我的测试中成功模拟社交网站的方法,但找不到任何方法。

在我的控制器中:

private function getAuthorizationFirst($provider)
{
    return $this->socialite->driver($provider)->redirect();
}

这就是我试图嘲笑的东西。 Socialite应该通过提供商'facebook'接收方法'driver'并返回一些内容。

我很确定我可能错过了几件事!

反馈非常感谢!

1 个答案:

答案 0 :(得分:1)

这适用于外墙。这就是你的问题。

在您的应用中,配置是您的社交名称别名:

'Socialite' => Laravel\Socialite\Facades\Socialite::class

所以你确实可以通过测试来打电话:

Socialite::shouldReceive(....)

但是现在,你把社交名媛别名为合同,所以你必须嘲笑你的合同,如下:

class AuthTests extends TestCase
{
    private $socialiteMock;

    public function setUp()
    {
        parent::setUp();
        $this->socialiteMock = Mockery::mock('Laravel\Socialite\Contracts\Factory');
    }

    public function testFb()
    {
        $this->socialiteMock
            ->shouldReceive('driver')
            ->once()
            ->with('facebook')
            ->andReturn('code');
        $this->visit('/auth/login/facebook');
    }
}