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

标签 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");
});

我得到的错误:

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/

相关文章:

javascript - typescript 装饰器只能在同一个方法中工作

TypeScript 合并通用数组

javascript - 无法在 Angular 5 中将 http 响应作为字符串获取

javascript - 无法使用 Promise 等待元素

javascript - jQuery 获取不是获取元素的 html

jquery - 从 jQuery ajax 使用类数组调用 asmx

php - 如何使用jQuery和AJAX在表单提交后立即显示数据?

jquery - 将字符串转换为普通对象

javascript - before/afterAll() 未在 jasmine-node 中定义

php - jQuery ajax 调用永远不会完成(不会触发成功和错误回调)