Typescript语法 - 如何监视Ajax请求?

时间:2016-06-23 18:09:59

标签: ajax typescript jasmine spy

我正在尝试编写一个单元测试,我想验证是否已经进行了ajax调用。 代码很简单:

it('test spycall',()=>{
spyOn($,"ajax");
//my method call which in turns use     ajax
MyFunc();
expect($.ajax.calls.mostRecent().args[0]["url"].toEqual("myurl");
});

我得到的错误:

  

财产'电话'在类型' {settings:jqueryAjaxSettings)中不存在:jQueryXHR;(url:string,settings?:JQueryAjaxSettings}

2 个答案:

答案 0 :(得分:1)

$.ajax.calls等等是Jasmine测试框架的一部分,而不是JQuery本身(正如你所知,Jasmine(或者更确切地说,Jasmine-Jquery,你正在使用的插件)正在添加某些调试函数是JQuery的原型,以便能够测试ajax调用。)

不好的部分是你的.d.ts打字稿定义文件,作为打字稿和纯JS库之间接口的文件,并不了解Jasmine的功能。

有几种方法可以解决这个问题,例如

  • 查看是否有人为Jasmine的功能调整了JQuery .d.ts文件或
  • 通过修改原始文件或(我会做什么)来自己创建新的.d.ts文件
  • 通过将$.ajax声明为any来覆盖打字稿定义,或者在测试代码库中根本不包含打字稿定义,并将$声明为any

答案 1 :(得分:1)

有两种方法可以消除错误:

<video id="video" autoplay controls loop webkit-playsinline>
    <source id="source" type="video/mp4" />
</video>

您也可以使用部分匹配:

// 1
expect(($.ajax as any).calls.mostRecent().args[0].url).toEqual("myurl");

// 2
let ajaxSpy = spyOn($,"ajax");
expect(ajaxSpy.calls.mostRecent().args[0].url).toEqual("myurl");