【问题标题】:Stub or fake an ajax function that does not take a callback as a parameter存根或伪造一个不将回调作为参数的 ajax 函数
【发布时间】:2019-01-05 13:04:41
【问题描述】:

我正在尝试在我的代码库中为我无法更改的 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());

或者我认为是这样的,因为我不完全确定这是否可行。,

但是由于我的函数没有回调,甚至没有“成功”或任何要存根的东西,我该怎么做?

【问题讨论】:

    标签: javascript unit-testing sinon


    【解决方案1】:

    fetch 不是回调函数,而是返回Promise。这就是为什么你在调用它时使用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/

    希望对你有帮助

    【讨论】:

    • 这有帮助!我让它像这样工作:let okResponse = [ { 'Content-type': 'application/json', 'status': 200 } ] let stub = sinon.stub($, 'ajax') let results = myFetch('aFakeURL.com') return results.then(result => expect(result).to.equal(okResponse))
    • @MoteZart 很高兴听到这个消息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    相关资源
    最近更新 更多