3

我正在使用 Behat/Mink 和 Selenium 进行验收测试。我需要确定我的网页是否通过 Ajax 对服务器进行格式错误的调用。问题是,服务器将尝试“纠正”格式错误的代码并返回有效数据。

有没有办法“拦截”和验证从我的网站发出的 ajax 调用?

现在我的 FeatureContext 类看起来像:

public function performAnAction()
{
  $this->enterInField('test', 'field');
  $this->hitOKButton();
  $this->assertResponseContains('success');
}

我想做类似的事情:

public function performAnAction()
{
  $this->enterInField('test', 'field');
  $this->hitOKButton();
  $ajax = $this->getAllAjaxCalls();
  foreach ($ajax as $call) {
    // perform some validation
  }
  $this->assertResponseContains('success');
}
4

1 回答 1

1

这里有两个很好的资源来检查 ajax 调用

behat貂方式

http://docs.behat.org/cookbook/behat_and_mink.html#defining-our-own-featurecontext

这是一个巧妙的解决方案,使用 _before 和 _after 覆盖以更深入地了解基本功能,并且非常有趣,但通读它将帮助您更好地了解框架在幕后的真正作用

http://blog.scur.pl/2012/06/ajax-callback-support-behat-mink/

我认为您可以简单地使用带有 js 回调的内置等待函数,通过将您的响应放入任何 html 元素上的 jquery data[] 对象中,并以这种方式验证您的预期输出,从而在自定义步骤 def 中获得您想要的内容。

$this->getSession()->wait(5000,
        "$('.someCssClassSelectorToElementWithResponseStuff').length > 0"
    );

如果您的元素是一个可以工作的 js 对象,或者如果它作为一个 jquery 对象返回,您可以使用 .size() 而不是 length 只需确保您注入的 js 评估为 true 或 false 以获得您的通过/失败

于 2013-01-08T03:39:35.350 回答