使用存储库和phpspec中的关系测试Laravel模型

时间:2015-02-14 18:37:48

标签: testing laravel repository eloquent phpspec

我有一个EloquentUserRepository,我想测试它的方法,但我真的不知道从哪里开始。任何人都可以为此提供任何帮助吗?

public function findByProvider($provider, $user)
{
    if (is_object($user))
    {
        $user = $user->id;
    }

    return $this->instance()->whereHas('socialProviders', function ($q) use ($provider, $user)
    {
        $q->where('name', $provider);
    })->first();
}

这是我想测试的功能的一个例子。它正在寻找拥有一个socialProvider的用户,例如github。具有社交提供者的用户的基本结构将是这样的:

$data = [
        'user' => [
            'id' => 1,
            'email' => 'test@test.com',
            'socialProvider' => [
                [
                    'name' => 'github',
                    'provider_id' => '00000000'
                ]
            ]
        ]
    ];

设置此项,如何根据此结构测试模型?是否真的需要为此目的创建内存数据库,迁移和种子,或者可以在没有它的情况下进行测试?

由于laracasts视频,我使用phpspec,但我不确定它是否是正确的选择......我希望你们中的一些人可以提供帮助!

1 个答案:

答案 0 :(得分:1)

以色列,我知道这是一个较旧的主题,但这可能会对将来有所帮助。在您的情况下,最好使用Codeception之类的东西,因为您使用的是Eloquent提供的方法。 根据我的经验,对Eloquent Models进行测试已经证明非常难以测试。你最终会在测试中编写你想要测试的方法的整个逻辑,这是不好的。

基本上,您可以假设Eloquent已经过正确测试,并且方法的行为符合预期,您的测试应该只声明此方法将返回您描述的特定数据集。

使用Codeception进行测试将证明是一项更容易的任务,并允许您根据各种数据状态测试各种场景。

希望这有助于您和未来的读者。