gpt4 book ai didi

ajax - 如何让 Behat 等待 Angular ajax 调用?

转载 作者:行者123 更新时间:2023-12-02 13:22:56 27 4
gpt4 key购买 nike

我有一个报告页面,它基本上是一个可以添加和删除列的表格。当您添加列时,将使用 Angular 来获取并通过 ajax 加载该列的数据。

考虑这个 Behat 场景:

Given I have a user named "Dillinger Four"
And I am on "/reports"
When I add the "User's Name" column
Then I should see "Dillinger Four"

如何让 Behat 等待 Angular 的 ajax 调用完成?我想避免使用 sleep ,因为 sleep 会增加不必要的延迟,并且如果调用时间太长就会失败。

我使用以下代码来等待 jquery 代码:

$this->getSession()->wait($duration, '(0 === jQuery.active)');

我还没有找到类似的值来检查 Angular 。

最佳答案

您上面的链接很有帮助,只是为了扩展它并节省其他人一点时间。

/**
* @Then /^I should see "([^"]*)" if I wait "([^"]*)"$/
*/
public function iShouldSeeIfIWait($text, $time)
{
$this->spin(function($context) use ($text) {
$this->assertPageContainsText($text);
return true;
}, intval($time) );
}


/**
* Special function to wait until angular has rendered the page fully, it will keep trying until either
* the condition is meet or the time runs out.
*
* @param function $lambda A anonymous function
* @param integer $wait Wait this length of time
*/
public function spin ($lambda, $wait = 60)
{
for ($i = 0; $i < $wait; $i++)
{
try {
if ($lambda($this)) {
return true;
}
} catch (Exception $e) {
// do nothing
}

sleep(1);
}

$backtrace = debug_backtrace();

throw new Exception(
"Timeout thrown by " . $backtrace[1]['class'] . "::" . $backtrace[1]['function'] . "()\n" .
$backtrace[1]['file'] . ", line " . $backtrace[1]['line']
);
}

然后在您的场景中使用:

然后我应该看到“页面上有东西”。如果我等“5”

关于ajax - 如何让 Behat 等待 Angular ajax 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156965/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com