具有 select 自动完成 ajax 字段的代码测试表单
Codeception testing form with select autocomplete ajax field
生产环境中的行为。
我有一个带有自动完成 select 框的表单,其初始表示为空:
<select name="customer"></select>
稍后,当我单击时,ajax 请求加载并填充选项的第一页(此时我不需要输入任何内容)。
然后,我可以选择一个选项并使用 ajax 提交表格。实体已成功保存,我显示一条闪现消息 "Item has been successfully created."
在 Codeception 环境中测试行为:
我需要使用功能测试 (Codeception)
来测试之前解释的行为
$I->amOnPage('/create');
$I->selectOption('select[name="customer"]', 1); //choose option with value = 1
$I->submitForm('form');
$I->canSee('Item has been successfully created.');
结果:
[InvalidArgumentException] Input "customer" cannot take "1" as a value (possible values: ).
这不行!当然,select 元素是空的(没有选项)。
所以此时我的问题很明显,我该如何测试这个场景?
我后来找到了问题的答案:
http://codeception.com/docs/modules/PhpBrowser#submitForm。
对于字段 (<select>
) 动态填充 (AJAX) 的情况,只需省略 $I->selectOption(...)
语句并将值直接传递给 $I->submitForm('form', [...]);
,所以:
$I->amOnPage('/create');
$I->submitForm('form', ['customer' => 1]);
$I->canSee('Item has been successfully created.');
够了,我的测试又变绿了:)
生产环境中的行为。
我有一个带有自动完成 select 框的表单,其初始表示为空:
<select name="customer"></select>
稍后,当我单击时,ajax 请求加载并填充选项的第一页(此时我不需要输入任何内容)。
然后,我可以选择一个选项并使用 ajax 提交表格。实体已成功保存,我显示一条闪现消息 "Item has been successfully created."
在 Codeception 环境中测试行为:
我需要使用功能测试 (Codeception)
来测试之前解释的行为$I->amOnPage('/create');
$I->selectOption('select[name="customer"]', 1); //choose option with value = 1
$I->submitForm('form');
$I->canSee('Item has been successfully created.');
结果:
[InvalidArgumentException] Input "customer" cannot take "1" as a value (possible values: ).
这不行!当然,select 元素是空的(没有选项)。
所以此时我的问题很明显,我该如何测试这个场景?
我后来找到了问题的答案:
http://codeception.com/docs/modules/PhpBrowser#submitForm。
对于字段 (<select>
) 动态填充 (AJAX) 的情况,只需省略 $I->selectOption(...)
语句并将值直接传递给 $I->submitForm('form', [...]);
,所以:
$I->amOnPage('/create');
$I->submitForm('form', ['customer' => 1]);
$I->canSee('Item has been successfully created.');
够了,我的测试又变绿了:)