我正在尝试编写一个单元测试,我想验证是否已经进行了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}
答案 0 :(得分:1)
$.ajax.calls
等等是Jasmine测试框架的一部分,而不是JQuery本身(正如你所知,Jasmine(或者更确切地说,Jasmine-Jquery,你正在使用的插件)正在添加某些调试函数是JQuery的原型,以便能够测试ajax调用。)
不好的部分是你的.d.ts
打字稿定义文件,作为打字稿和纯JS库之间接口的文件,并不了解Jasmine的功能。
有几种方法可以解决这个问题,例如
.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");