我正在尝试模拟(仅限于示例)$ user-> posts() - > get() .
示例服务:
use App\Models\User;
class SomeClass{
public function getActivePost(User $user): Collection
{
return $user->posts()->get();
}
}
和我的模型:和型号:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use \App\Models\Post;
class User extends Model
{
public function posts() : HasMany
{
return $this->hasMany(Post::class);
}
}
这不起作用:
$this->user = Mockery::mock(User::class);
$this->user
->shouldReceive('wallets->get')
->andReturn('test output');
错误:TypeError:Mockery_2_App_Models_User :: posts()的返回值必须是Illuminate \ Database \ Eloquent \ Relations \ HasMany的实例,返回Mockery_4__demeter_posts的实例
没有返回类型提示(在post()方法上)一切正常 . 我必须修改andReturn()吗?如何
3 回答
我也不会在这里使用嘲笑 . 绝对没有必要 . 所以我写的单元测试将是:
创建用户 .
创建用户创作的一些帖子 .
对用户和帖子执行断言 .
所以在我的测试中代码将是这样的:
如果你想测试你可以的关系:
使用带有效类名的别名前缀可以解决此错误 . 如下:
更多信息可以在官方文档中找到http://docs.mockery.io/en/latest/reference/creating_test_doubles.html#aliasing