存根或伪造一个不将回调作为参数的 ajax 函数

Stub or fake an ajax function that does not take a callback as a parameter

我正在尝试在我的代码库中为我无法更改的 ajax 函数创建一个测试,它非常像这样:

function myFetch (src) {
  return $.ajax({
    url: src
  })
}

我这样调用它并返回一个 json 对象数组(作为示例)

myFetch('https://jsonplaceholder.typicode.com/posts').then(i => console.log(i))

我如何为此创建伪造的 XHR 或伪造的服务器(或想到的其他想法)?我只看过示例,包括显示如何使用回调执行此操作的 sinon 文档,因此如果我的函数是 myFetch(src, callback) 我可以使用:

sinon.replace(jQuery, 'ajax', sinon.fake());
myFetch(fake.com, sinon.fake());

或者我假设是这样的,因为我不确定这是否可行。,

但是我该怎么做,因为我的函数没有回调,甚至没有 'success' 或任何存根?

fetch不是回调函数而是returnPromise。这就是为什么你在调用它时使用 then 的原因。对于测试Promise,sinon有很好的方法resolvesreject。所以,根据你的代码,你可以这样做。

const fakeResponse = [{ todo_id: 1, todo_name: 'get wake up' }];
sinon.stub(jQuery, 'ajax').resolves(fakeResponse);
getTodos(42); 

参考:http://sinonjs.org/releases/v4.1.2/stubs/

希望对您有所帮助