2016-12-30 3 views
2

У меня есть тест единицы в Laravel для тестирования вызова API, который выглядит так, однако я получаю следующее сообщение об ошибке выполнения при его запуске:PHPUnit Laravel Hash нет в наличии

RuntimeException: A facade root has not been set. 

Я создаю пользователь в методе установки, с намерением удалить его снова в методе tearDown(), затем запустите мой тест auth.

Во-первых, есть ли лучший способ сделать то, что я хочу? Например, издеваясь над пользователем, не касаясь базы данных? А во-вторых, как установить «корень фасада» или что означает эта ошибка? Я попытался не беспокоиться о хэш-адресе этого конкретного поля для создания пользователя Dummy, но, похоже, ошибка переместилась к модели, где (опять же) используется класс фасада 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

ли вы проверяете расширения TestCase Laravel в? –

+0

@RossWilson yep, extends TestCase – Paul

ответ

6

Попробуйте использовать вместо этого:

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

Это хорошая идея использовать bcrypt() глобального помощника вместо Hash::make()

Кроме того, добавьте в setUp() метод:

parent::setUp(); 
+0

Класс Hash не найден. Обратите внимание, что присутствует оператор импорта, используйте Illuminate \ Support \ Facades \ Hash as Hash; тоже не работает. – Paul

+0

, который возвращает корень фасада, не был установлен. – Paul

+0

Вы забыли вызвать 'parent :: setUp();' в 'setUp()' метод. –

-1
  1. Вы можете использовать свойство DatabaseMigrations или DatabaseTransactions, которое поставляется с Laravel, поэтому вам не нужно вручную удалять пользователя.

  2. Вы можете добавить Mutator в свой класс User, который автоматически будет содержать пароль при создании Пользователя.

 


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

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

Смежные вопросы