2016-12-30 6 views
2

私はそれを実行しているときしかし、私は、次のランタイムエラーを取得しています、このようになりますAPI呼び出しをテストするためのLaravelのユニットテストを持っている:PHPUnitのLaravelハッシュが利用できない

RuntimeException: A facade root has not been set. 

私は、ユーザーを作成していますsetupメソッドで、tearDown()メソッドで再度削除する予定で、次にmy auth testを実行します。

まず、私がしたいことをするためのよりよい方法がありますか?たとえば、データベースに触れることなくユーザーを嘲笑しますか?第二に、どのように私は 'ファサードルート'を設定するか、そのエラーはどういう意味ですか?私はダミーユーザーを作成する目的でその特定のフィールドをハッシュしないようにしてみましたが、エラーはモデルに移動しているように見えます。ここで(再び)Hashファサードクラスが使用されています。

これらのファサードをテストで使用できるように環境をセットアップする追加の手順はありますか?

ありがとうございます。

use Illuminate\Support\Facades\Hash; 

/* 
* Make sure the structure of the API call is sound. 
*/ 
public function testAuthenticateFailed() 
{ 

    $this->json('POST', $this->endpoint, 
     [ 'email' => '[email protected]', 
      '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' => '[email protected]', 
     'password' => 'password', 
     'hashed_email' => Hash:make('[email protected]'), 
    ]); 
} 
+0

LaravelのTestCaseクラスを拡張し、あなたのテストですか? –

+0

@RossWilson yep、TestCaseを延長 – Paul

答えて

6

ではなく、これを使用してみてください:

\Hash::make('[email protected]'), 

それは、また、代わりにHash::make()

bcrypt()グローバルヘルパーを使用しsetUp()方法にこれを追加することをお勧めします:

parent::setUp(); 
+0

クラス 'ハッシュ'が見つかりません。インポートステートメントが存在することに注意してください.Hashとして\ Illuminate \ Support \ Facades \ Hashを使用してください。いずれも機能しません。ファサードルートを返す – Paul

+0

が設定されていません。 – Paul

+0

'setUp()'メソッドで 'parent :: setUp();'を呼ぶのを忘れてしまいました。 –

-1
  1. Laravelに付属するDatabaseMigrationsまたはDatabaseTransactions特性を使用して、手動でユーザーを削除する必要はありません。

  2. UserクラスにMutatorを追加すると、Userクラスの作成時に自動的にパスワードがハッシュされます。

 


    // https://laravel.com/docs/5.3/eloquent-mutators 

    public function setPasswordAttribute($value) { 
     $this->attributes['password'] = bcrypt($value); 
    } 

関連する問題