如何让Behat等待AJAX​​通话?

9 php ajax bdd behat

场景:修改并保存对Campaign的不完整更改

Given I click on the Campaign section folder
And I press Save in the selected Campaign
Then I should see an error balloon informing the changes cannot be saved
Run Code Online (Sandbox Code Playgroud)

重点是最后一步中的'错误气球'是ajax调用,然后根据操作的成功带来绿色或红色气球.目前我所做的是在"我按下保存..."后,我会睡觉(3)让它有时间让这个气球出现.这似乎不是很聪明,因为你浪费时间,而且因为有时候处理这​​个电话会花费更多或更少的时间.

你们怎么做你的behat测试等待Ajax做的而不仅仅是让野兽睡觉?

非常感谢您的任何反馈!

小智 26

这是通过等待你的杰出ajax调用达到0. jQuery.active将为你检查.

在你的FeatureContext.php中,你可以做类似的事情.

public function iShouldSeeAnErrorBalloon($title)
{
    $time = 5000; // time should be in milliseconds
    $this->getSession()->wait($time, '(0 === jQuery.active)');
    // asserts below
}
Run Code Online (Sandbox Code Playgroud)

并确保您使用运行javascript和ajax的Mink驱动程序(默认情况下不运行).