PHPUnit Laravel 哈希不可用
PHPUnit Laravel Hash not available
我在 Laravel 中有一个单元测试,用于测试看起来像这样的 API 调用,但是当 运行ning 时我收到以下 运行time 错误它:
RuntimeException: A facade root has not been set.
我在 setup 方法中创建一个用户,目的是在 tearDown() 方法中再次删除它,然后 运行 我的身份验证测试。
首先,有没有更好的方法来做我想做的事情?例如在不接触数据库的情况下模拟用户?其次,如何设置 'facade root' 或者该错误的确切含义是什么?为了创建一个虚拟用户,我尝试不费心去散列那个特定的字段,但是错误似乎转移到模型上,在那里(再次)使用散列外观 class。
是否有任何额外的步骤来设置环境以便这些外观可以用于测试?
提前致谢。
use Illuminate\Support\Facades\Hash;
/*
* Make sure the structure of the API call is sound.
*/
public function testAuthenticateFailed()
{
$this->json('POST', $this->endpoint,
[ 'email' => 'test@test.com',
'password' => 'password',
])
->seeJsonStructure([
'token'
]);
}
//create a user if they don't already exist.
public function setup()
{
$user = User::create([
'company_id' => 9999,
'name'=>'testUser',
'email' => 'test@test.com',
'password' => 'password',
'hashed_email' => Hash:make('test@test.com'),
]);
}
尝试改用它:
\Hash::make('test@test.com'),
最好使用 bcrypt()
全局助手而不是 Hash::make()
此外,将此添加到 setUp()
方法:
parent::setUp();
您可以使用 Laravel 附带的 DatabaseMigrations
或 DatabaseTransactions
特征,这样您就不必手动删除用户。
您可以向您的用户添加一个 Mutator class,它会在创建用户时自动散列密码。
// https://laravel.com/docs/5.3/eloquent-mutators
public function setPasswordAttribute($value) {
$this->attributes['password'] = bcrypt($value);
}
我在 Laravel 中有一个单元测试,用于测试看起来像这样的 API 调用,但是当 运行ning 时我收到以下 运行time 错误它:
RuntimeException: A facade root has not been set.
我在 setup 方法中创建一个用户,目的是在 tearDown() 方法中再次删除它,然后 运行 我的身份验证测试。
首先,有没有更好的方法来做我想做的事情?例如在不接触数据库的情况下模拟用户?其次,如何设置 'facade root' 或者该错误的确切含义是什么?为了创建一个虚拟用户,我尝试不费心去散列那个特定的字段,但是错误似乎转移到模型上,在那里(再次)使用散列外观 class。
是否有任何额外的步骤来设置环境以便这些外观可以用于测试?
提前致谢。
use Illuminate\Support\Facades\Hash;
/*
* Make sure the structure of the API call is sound.
*/
public function testAuthenticateFailed()
{
$this->json('POST', $this->endpoint,
[ 'email' => 'test@test.com',
'password' => 'password',
])
->seeJsonStructure([
'token'
]);
}
//create a user if they don't already exist.
public function setup()
{
$user = User::create([
'company_id' => 9999,
'name'=>'testUser',
'email' => 'test@test.com',
'password' => 'password',
'hashed_email' => Hash:make('test@test.com'),
]);
}
尝试改用它:
\Hash::make('test@test.com'),
最好使用 bcrypt()
全局助手而不是 Hash::make()
此外,将此添加到 setUp()
方法:
parent::setUp();
您可以使用 Laravel 附带的
DatabaseMigrations
或DatabaseTransactions
特征,这样您就不必手动删除用户。您可以向您的用户添加一个 Mutator class,它会在创建用户时自动散列密码。
// https://laravel.com/docs/5.3/eloquent-mutators
public function setPasswordAttribute($value) {
$this->attributes['password'] = bcrypt($value);
}