1

我有一个 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,但我不确定它是否是正确的选择......我希望你们中的一些人可以提供帮助!

4

1 回答 1

1

以色列,我知道这是一个较旧的线程,但这可能对将来的某人有所帮助。在您的情况下,最好使用Codeception 之类的东西,因为您使用的是 Eloquent 提供的方法。根据我的经验,围绕 Eloquent 模型进行的测试被证明是非常难以测试的。您最终在测试中编写了您尝试测试的方法的整个逻辑,这并不好。

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

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

希望这对您和未来的读者有所帮助。

于 2015-07-22T14:19:30.177 回答