Ошибка: вызов функции-члена create () для null, модульный тест (Mockery) - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь выполнить модульный тест класса " AdminService ", который имеет метод " create () ", и в конструкторе мне нужна зависимость, которая AdminRepository .

Я использовал насмешку, чтобы смоделировать хранилище, и передал эту ложь AdminService _contsruct (), но у меня возникла ошибка, когда я запускаю тест, который говорит: Ошибка: Вызов функции-члена create () в null

Это AdminService , который я пытаюсь проверить: я следовал этой статье: Модульные тесты - сложный аргумент, совпадающий с Mockery :: on - правильный путь

use App\Repositories\AdminRepository;

class AdminService {

    protected $admin_repo;

    public function _contsruct(AdminRepository $admin_repo){
        $this->$admin_repo= $admin_repo;
    }

    public function create($data){
        return  $this->admin_repo->create($data); 

    }



}  

и тестовый код:

/** @test */
   public function it_can_create_Admin(){

      $data=[
         "first_name"=>"lama",
         "last_name"=>"sonmez",
         "email"=>"lamasonmez@gmail.com",
         "password"=>"secret"
      ];


      $repo_mock = Mockery::mock(AdminRepository::class);
      $repo_mock->shouldReceive('create')->once()->with($data)
          ->andReturn('anything');
      $admin_service = new AdminService($repo_mock);
      $admin = $admin_service->create($data);
      $this->assertInstanceOf(Admin::class,$admin);

   }   

Я не знаю, что здесь не так, пожалуйста, помогите.

, когда я dd ($ repo_mock) мне кажется, что это не ноль
, но когда я получил dd ($ admin_service), я получил

App\Services\AdminService^ {#4106
  #admin_repo: null
}  

1 Ответ

0 голосов
/ 25 февраля 2020

О, я разобрался, почему это происходит, потому что знак подчеркивания для конструкторов в AdminRepository и AdminService должен иметь два подчеркивания перед клавишной конструкцией, такой как __ construct , а не такой _construct

...