我热衷于让我的代码解耦并准备好进行测试。
我有一个Eloquent模型,getBudgetConvertedAttribute依赖于sentry用户属性。
public function getBudgetConvertedAttribute()
{
return Sentry::getUser()->currency * $this->budget;
}
测试时抛出此错误,因为Sentry :: getUser返回null。
我的问题是,如何将用户从控制器或服务提供商绑定或测试中注入模型?
答案 0 :(得分:0)
在构造函数中将$ sentry对象作为依赖项注入,而不是使用Sentry Facade。
实施例
use Path\To\Sentry;
class ClassName
{
protected $sentry
public function __construct(Sentry $sentry)
{
$this->sentry = $sentry;
}
public function methodName()
{
$this->sentry->sentryMethod();
}
}
答案 1 :(得分:0)
为什么不在模型上创建方法,然后将Sentry用户对象作为参数?
public function getBudgetConverted(SentryUser $user)
{
return $user->currency * $this->budget;
}
您需要将type-hint(SentryUser
)更改为用户类的实际名称。
如果这是为了帮助测试,你可以在界面上进行一步操作和类型提示(你应该以任何方式),这样你就可以使用模拟用户对象测试你的方法,而不是可能有Eloquent模型所做的其他依赖项的加载,如数据库连接。