用存根测试承诺

Testing promise with stub

我正在尝试使用 sinon 存根对 chai 进行一些测试。问题是,我正在像这样存根并兑现我的承诺。

  let fetchedStub;

  beforeEach(() => {
    fetchedStub = sinon.stub(global, 'fetch');
    fetchedStub.resolves({ json: () => { body: 'json' } });
  });

然后我正在测试我的数据是否正确返回

it('should return the JSON data from the promise', () => {
  const result = search('test');
  result.then((data) => {
    expect(data).to.be.eql({ body: 'json' });
  });
});

但是我没有通过测试,而是

TypeError: Cannot read property 'then' of undefined

我是不是做错了什么我的承诺?我想我需要一些光。

编辑:这是搜索功能。

    export const search = (query) => {
  fetch(`https://api.spotify.com/v1/search?q=${query}&type=artist`)
    .then(data => data.json());
};

您的 search 箭头函数没有 return 任何东西,因此在您的测试中 result 未定义,因此出现错误消息。

您应该 return 您的获取结果:

export const search = (query) => {
  // return something
  return fetch(`url`).then(data => data.json());
};

可能 对箭头函数 shorthand 语法感到困惑,它自动 return单个表达式的结果,前提是它 不是 包裹在大括号中:

export const search = (query) => fetch(`url`).then(data => data.json()); // no curly braces after the arrow