我正在努力寻找有关如何使用 Jasmine BDD 伪造 ajax 调用的任何示例?

我有一个自定义的 ajax 函数,其工作原理如下......

ajax({
    url: 'JSON.php',
    dataType: 'json',           
    onSuccess: function(resp) {
        console.log(resp);
    }
});

...而且我不知道如何创建一个存根来伪造调用实际的 ajax 函数。

我想避免调用 ajax 函数,因为如果对服务器的真正 ajax 调用需要一些时间来响应,并且我的测试套件中有大量规格,那么它可能会减慢我的测试套件的速度。

我听说你可以使用 spyOn(namespace, 'ajax') 但这立刻就很烦人,因为它需要我包裹我的 ajax 对象中的函数只是为了使用 spyOn 函数(但无论如何我无法理解,因为我找不到任何具体的例子来伪造 ajax 调用)。

我还听说你可以使用 createSpy() 但同样,文档也不是很有帮助(GitHub 上相应的 wiki 也不是)。

任何解释如何使用间谍创建虚假 ajax 调用的帮助将不胜感激!

有帮助吗?

解决方案

您可以使用SinonJS模拟框架,该框架在伪造服务器中具有构建。您可以轻松地将其与茉莉花一起使用: 通用标签

顺便说一句。如果您的ajax函数位于全局名称空间中,为什么不调用spyOn(window, 'ajax')

其他提示

关于单个功能,您可以使用'createSpy': 通用标签

var不存在,因为您要重新定义它,但随后需要将定义此间谍的程序段绑定到定义实际ajax的相同作用域。或者,如果您对此感到困惑,请使用spyOn(window, foo),因为无论如何您正在浏览器中对其进行测试。

有关详细信息,请参见此答案

关于ajax调用,请参见 异步支持部分新文档中的a>,或者最好使用时钟 通用标签

如果您可以不使用间谍,而是使用附加组件 茉莉花ajax. 。模拟单个规范的使用 withMock:

  it("allows use in a single spec", function() {
    var onSuccess = jasmine.createSpy('success');
    jasmine.Ajax.withMock(function() {
      ajax({
            url: 'JSON.php',
            dataType: 'json',           
            onSuccess: onSuccess
      });
      expect(onSuccess).not.toHaveBeenCalled();

      jasmine.Ajax.requests.mostRecent().respondWith({
        "status": 200,
        "responseText": '{"some": "json"}'
      });

      expect(onSuccess).toHaveBeenCalledWith('{"some": "json"}');
    });
  });

仅当您使用时才会发送响应 respondWith. 。上面的链接有一些如何安装的说明

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top