Я пытаюсь протестировать некоторые из моих контроллеров с помощью Unit Testing. Но происходит что-то странное. С помощью следующего кода в моем TestCase:Ошибка проверки контроллеров модулей Laravel при использовании нескольких методов
public function test_username_registration_too_short()
{
$result = $this->action('POST', 'App\\Controllers\\API\\[email protected]', null, [
'username' => 'foo'
]);
$this->assertEquals('not_saved', $result->getContent());
// $result = $this->action('POST', 'App\\Controllers\\API\\[email protected]', null, [
// 'username' => 'foo'
// ]);
// $this->assertEquals('not_saved', $result->getContent());
}
public function test_username_registration_too_short_run_2()
{
$result = $this->action('POST', 'App\\Controllers\\API\\[email protected]', null, [
'username' => 'foo'
]);
$this->assertEquals('not_saved', $result->getContent());
}
Когда я запускаю это, первоначальное испытание too_short проходит, но точно такой же код на счете 2 не проходит (это даже удается сохранить пользователя). Но если я поместил тот же самый код дважды в один и тот же метод (что сейчас прокомментировано), он работает отлично? У меня нет ничего в методах setUp или tearDown. И я немного потерялся здесь.
код в контроллере следующее:
$user = new User(Input::all());
if($user->save())
{
return 'saved';
}
return 'not_saved';
Но если это не сделано для этого, почему документация Laravel точно показывает, что я делаю? http://laravel.com/docs/testing#refreshing-the-application в моем поиске по сети Я наткнулся на Бехат, но я подумал, хорошо сначала попробуем «Laraval» документально. – Matthijn
Я знаю. Истина заключается в том, что вы можете сказать, что все ваше приложение является единицей в определенном контексте, и вы можете использовать методы тестирования модулей для проведения тестирования. Иногда это приемлемо, но в большинстве случаев это плохая идея. Допустимо было бы, когда ваши действия просты (не имеют много логики, не используйте сеансы, т. Е. Можно запускать несколько раз, не вызывая проблем). В таких ситуациях PHPUnit будет более простым и быстрым решением для запуска ** имитируемых ** запросов. Но чтобы правильно протестировать полные функциональные блоки (запрос/ответ), для этого вам нужен подходящий инструмент. –
Если у вас есть будущие вопросы о Behat/Mink, ознакомьтесь с [соответствующими тегами] (http://stackoverflow.com/questions/tagged/behat+or+mink) или спросите их, есть много поддержки. –