我正在尝试使用我的应用程序中的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'并返回一些内容。
我很确定我可能错过了几件事!
反馈非常感谢!
答案 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');
}
}