https://laracasts.com/lessons/laravel-5-and-behat-driving-authentication
Это учебник от Jeoffery Way, который я тестирую
Это сценарий, который я пытаюсь проверить
Scenario: Adding a new school
When I add a new school with "Narendra School" "This is a cool school"Then I should see "Add School"And a school is created
Это мой файл контекста
/**
* @When I add a new school with :arg1 :arg2
*/
public function iAddANewSchoolWith($name , $description )
{
$this->visit('school/create');
$this->fillField( 'name', $name );
$this->fillField( 'description', $description );
$this->pressButton('register');
}
/**
* @Then a school is created
*/
public function aSchoolIsCreated()
{
$school = School::all();
PHPUnit::assertEquals($school->isEmpty(), false );
}
Это мой HTML-код
<form method="post">
<h2>Add School</h2>
<input type="hidden" name="_token" value="{!! Session::getToken() !!}"/>
<input type="text" name="name" placeholder="Name">
<textarea name="description" placeholder="Description"></textarea>
<button name="register">Register</button>
</form>
Это метод контроллера, который я использую для создания объекта
function create( ) {
if ( \Request::isMethod( 'post' ) ) {
$this->school->add( \Input::all() );// I am using a repository and dependency injection so this code is fine, it will add a school
}
return view('school::school.add');
}
Когда я нажимаю на ссылку, заполняю форму и нажимаю регистр в браузере, я сохраняю новую школу, но когда я запускаю тест, я не могу создать школу.
Тест запущен, я вижу HTML, когда я делаю printLastResponse()
Feature: Testing
In order to teach Behat
As a teacher
I want to add a new school
Scenario: Adding a new school # features\example.feature:6
When I add a new school with "Narendra School" "This is a cool school" # FeatureContext::iAddANewSchoolWith()
Then I should see "Add School" # FeatureContext::assertPageContainsText()
And a school is created # FeatureContext::aSchoolIsCreated()
Failed asserting that false matches expected true.
--- Failed scenarios:
features\example.feature:6
1 scenario (1 failed)
3 steps (2 passed, 1 failed)
0m3.10s (26.24Mb)
Это мой терминал лог
Что я делаю неправильно?
Вы можете попробовать заменить:
$this->pressButton('register');
С чем-то вроде:
$page = $this->getSession()->getPage();
$buttonElement = $page->find('css',".//button[@name='register']");
$buttonElement->click();
Когда вы используете Selenium Driver, иногда вы можете найти подсказку в журналах Selenium Server или, по крайней мере, увидеть исключение, когда что-то идет не так.
Также это было бы лучше 😉
PHPUnit::assertNotEmpty($school->isEmpty());
Других решений пока нет …