В моей LoadFixture.php я добавить ссылку на все мои светильники так:светильникам disapearing после одного теста
public function load(ObjectManager $manager) {
$user = new user("Dummy");
$this->persist($user);
$this->addReference("user", $user);
}
В моем тестовом классе я загружаю их, как это:
public function setUp() {
if(self::$do_setup){
$this->loadFixtures(array(
"Bundle\\Tests\\Fixtures\\LoadUser"
)) ;
}
}
в моих тестах я использую их, как это:
public function testOne() {
$client = $this->createClient($this->getReference("user_a"));
$client->request('GET', '/');
$this->assertStatusCode(200, $client);
self::$do_setup=false;
}
public function testTwo() {
$client = $this->createClient($this->getReference("user_a"));
$client->request('GET', '/home');
$this->assertStatusCode(200, $client);
}
дело в том, технически, я не нужно использовать setUp()
для каждого теста, поэтому я использую $do_setup
и if
для выполнения setUp
при необходимости.
Но если я не выполнять setUp()
в моем testTwo
, в то время как мои светильники в моей базе данных, $this->getReference("user_a")
дает мне ошибку:
Call to a member function getReferenceRepository() on a non-object
Как я могу решить это?
UPDATE
Я нашел решение. Поэтому я отправляю его здесь, на случай, если кто-то столкнется с той же проблемой, что и я. Большое спасибо @Damien Flament за его ответ, учитывая тот факт, что TestCase удаляется после каждого теста.
Я сменил название своего метода setUp()
на open()
и мой tearDown()
метод до close()
. Первый метод класса вызывает метод open()
, а теперь возвращает $this
. Следующий метод записывается в память @depends testOne
и принимает параметр. С помощью этого параметра я могу снова использовать свои ссылки. Ex:
// new setUp Metod
public function open() {
if(self::$do_setup){
$this->loadFixtures(array(
"Bundle\\Tests\\Fixtures\\LoadUser"
)) ;
}
}
//new tearDown method
public function close() {
$this->getContainer()->get('doctrine.orm.entity_manager')->getConnection()->close();
}
public function testOne() {
$this->open();
$client = $this->createClient($this->getReference("user_a"));
$client->request('GET', '/');
$this->assertStatusCode(200, $client);
return $this;
}
/**
* @depends testOne
*/
public function testTwo($it) {
$client = $this->createClient($it->getReference("user_a"));
$client->request('GET', '/home');
$this->assertStatusCode(200, $client);
return $it;
}
/**
* @depends testTwo
*/
public function testThree($it) {
$client = $this->createClient($it->getReference("user_a"));
$client->request('GET', '/about');
$this->assertStatusCode(200, $client);
$this->close();
}
Пожалуйста, отредактируйте и обновите исходный вопрос («Проблема создания ссылок на инструменты доктрины в статическом контексте») вместо создания нового. – aferber