【问题标题】:PHP Fatal error: Call to undefined method Laravel\Socialite\Contracts\Factory::shouldReceive()PHP 致命错误:调用未定义的方法 Laravel\Socialite\Contracts\Factory::shouldReceive()
【发布时间】:2016-04-20 19:21:12
【问题描述】:

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

这是我测试 socilate 的尝试:

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

这就是我试图模拟的。社交名流应该通过提供者 'facebook' 接收方法 'driver' 并返回一些东西。

我很确定我可能错过了一些事情!

非常感谢您的反馈!

【问题讨论】:

    标签: php phpunit


    【解决方案1】:

    这应该适用于外墙。还有你的问题。

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

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

    所以你确实可以从你的测试中调用:

    Socialite::shouldReceive(....)
    

    但是现在,您将 Socialite 别名为合同,因此您必须模拟您的合同,如下所示:

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

    【讨论】:

      猜你喜欢
      • 2016-07-11
      • 2018-01-02
      • 2015-05-13
      • 2013-11-01
      • 1970-01-01
      • 2016-05-26
      • 2016-06-22
      • 2016-08-08
      • 1970-01-01
      相关资源
      最近更新 更多