Переопределить введенный класс в люмен-тесте - PullRequest
0 голосов
/ 07 июня 2018

Я реализую rest api с lumen, где я использую в основном процедуры MySql. У меня есть некоторый класс Connection, репозиторий, который внедряется в контроллеры, но я хочу протестировать эти репозитории с заменой класса Connection в Constructor, потому что я использую процедуры, которые мне не нужны.тестовая база данных, где будет вызываться.

Пример RepositoryClass:

class UserRepository {
    protected $readConnection;

    public function __construct(MydbConnection $readConnection) {
        $this->readConnection = $readConnection;
    }

    public function checkUserPermission(username, password) {
        return $this->readConnection->callProcedure('check_perm', [username, password]);
    }

}

в тесте у меня есть:

class AuthTest extends TestCase
{
    protected $controller;
    protected $mockConn;

    public function setUp()
    {
        parent::setUp();
        // make mockery object
        $this->mockConn = Mockery::mock(MydbConnection::class);
        $this->app->instance(MydbConnection::class, $this->mockConn);

        // try override userRepository 
        $repo = $this->app->make(UserRepository::class);
        $this->app->bind( UserRepository::class, $repo);

        // then override controller
        $this->controller = $this->app->make(AuthController::class);
        $this->app->bind(AuthController::class, function () {
            return $this->controller;
        });
    }

    public function testLogin()
    {
       $this->post('/auth/login', [
           'username' => 'test.dev',
            'password' => 'Test123'
       ]);

        $this->mockConn->shouldReceive('callProcedure');
   }
}

, но это не работает, не могли бы вы помочьмне, как я могу заменить MydbConnection на объект насмешки?

...