Jak testovat odeslání formuláře, pokud je volání obslužné metody řešeno callbackem?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- fary
- Člen | 155
Mám takovýto formulář:
use Nette\Application\UI\Form;
final class CreateArticleForm
{
/** @var ArticleRepository */
private $articleRepository;
/**
* @param ArticleRepository $articleRepository
*/
public function __construct(ArticleRepository $articleRepository)
{
$this->articleRepository = $articleRepository;
}
public function create($values = NULL)
{
$form = new Form;
$this->configure($form);
if ($values) {
$form->setValues($values);
}
return $form;
}
public function configure(Form $form)
{
$form->addText('name', 'Name')
->setRequired('Please enter name for this article.');
$form->addSubmit('submit', 'Save');
}
public function save(Form $form)
{
$values = $form->getValues();
$this->articleRepository->create($values);
$form->getPresenter()->redirect('default');
}
}
a pak v presenteru tento formulář vytvářím:
use Nette\Application\UI\Presenter;
final class ArticlePresenter extends Presenter
{
/**
* @inject
* @var CreateArticleForm $createArticleForm
*/
public $createArticleForm;
protected function createComponentCreateArticleForm()
{
$form = $this->createArticleForm->create();
$form->onSuccess[] = function() use ($form) {
$this->createArticleForm->save($form);
};
return $form;
}
}
Zpracování formuláře není řešeno metodou presenteru, ale vlastní metodou třídy formuláře. Chtěl bych požádat o radu, jak by měl správně vypadat unit test, který otestuje vytvoření takového formuláře a odešle data do metody CreateArticleForm::save().