我正在尝试编写一个单元测试,我想验证是否已进行 ajax 调用。 代码很简单:
it('test spycall',()=>{
spyOn($,"ajax");
//my method call which in turns use ajax
MyFunc();
expect($.ajax.calls.mostRecent().args[0]["url"].toEqual("myurl");
});
我得到的错误:
Property 'calls' doesn't exist on type '{settings:jqueryAjaxSettings):jQueryXHR;(url:string, settings?:JQueryAjaxSettings}
最佳答案
$.ajax.calls
等是 Jasmine 测试框架的一部分,而不是 JQuery 本身(如您所知,Jasmine(或者更确切地说,Jasmine-Jquery,您正在使用的插件) )正在向 JQuery 原型(prototype)添加某些调试功能,以便能够测试 ajax 调用)。
不好的部分是您的 .d.ts
typescript 定义文件(充当 typescript 和纯 JS 库之间的接口(interface)的文件)不知道 Jasmine 的功能。
有几种方法可以解决这个问题,例如
- 查看是否有人针对 Jasmine 的功能调整了 JQuery
.d.ts
文件或 - 通过修改原始文件自行创建新的
.d.ts
文件,或者(我将要做的事情) - 通过将
$.ajax
声明为any
来覆盖 Typescript 定义,或者在测试代码库中根本不包含 TypeScript 定义并声明$
> 作为任意
。
关于ajax - Typescript 语法 - 如何监视 Ajax 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998890/