在sinon中模拟HTTP获取

8
我试图在jsfiddle中模拟HTTP fetch。我不确定我的错误是什么,导致结果与模拟结果不相等。
这是我的示例代码:(您可以在浏览器控制台中查看日志。)
链接:http://jsfiddle.net/maryam_saeidi/yredb06m/7/
async function getUser(userId) {    
        var user = await fetch("http://website/api/users/" + userId);
    return user.json();
} 

mocha.setup("bdd");
chai.should();
var assert = chai.assert,
        expect = chai.expect;

describe('getUser()', () => {
    let server;

    beforeEach(function() {
    server = sinon.fakeServer.create();
  });

  afterEach(function () {
    server.restore();
  });

  it('should return a user.', async () => {
    const response = await getUser(1);
    console.log("response:", response);
  });

  it('should return a user object', async () => {
    const userId = 10;
    server.respondWith("GET", "http://website/api/users/" + userId,[200, { "Content-Type": "application/json" },
                        '{ "id": "1", "username": "John", "avatar_url": "A_URL" }']);
    const response = getUser(userId);
    server.respond();
    response.then(function(result){
      console.log("result:",result); //The code doesn't get here
      result.should.deep.equal({ "id": "1", "username": "John", "avatar_url": "A_URL" });
      });
  });

});

mocha.run();
1个回答

7
fatso83此处所述:
Fetch和XHR是不同的API。XHR存根的基础库-nise仅支持XHR(Sinon也是如此)。您可以查看sinonjs/nise#7获取一些有关如何完成此操作的提示。
此代码由Mark Middleton编写,它也帮助我进行了测试:(Sinon模拟fetch调用)
import sinonStubPromise from 'sinon-stub-promise';
import sinon from 'sinon'
sinonStubPromise(sinon)


let stubedFetch = sinon.stub(window, 'fetch') )

window.fetch.returns(Promise.resolve(mockApiResponse()));

function mockApiResponse(body = {}) {
    return new window.Response(JSON.stringify(body), {
       status: 200,
       headers: { 'Content-type': 'application/json' }
    });
}

1
我已经尝试过这个,但是在 sinon.stub() 上无法跨越这个错误: TypeError: Cannot stub non-existent own property fetch。任何想法我可能做错了什么吗? - carpiediem
@carpiediem 看起来这是一个类型错误,可能与库的版本或其他许多原因有关。我建议尝试在Sinon库的问题中找到错误,例如此链接: https://github.com/sinonjs/sinon/issues/1720 - Maryam Saeidi
1
stubedFetch 没有被任何地方使用。 - montrealist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接