具有 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.');

够了,我的测试又变绿了:)