【问题标题】:is there a function to test an object instance that has a callback in js?是否有一个函数可以测试在 js 中有回调的对象实例?
【发布时间】:2019-03-23 03:35:09
【问题描述】:

我正在使用 sinon 来存根一个对象的实例,该对象在一个带有回调的函数内部,我该如何测试它? 我不知道如何测试,这会引发错误。

这是用 js 搭配 sinon 和 mocha。

功能是:

import tracker from 'pivotaltracker';

export async function getPivotalProjects(token) {
  const clientTracker = new tracker.Client(token);
  const userProjects = () => new Promise((resolve, reject) => {
    clientTracker.projects.all((error, projects) => (projects ? resolve(projects) : reject(error)));
  });
  return userProjects();

测试是:

import tracker from 'pivotaltracker';
let spyTracker;
    beforeEach(() => {
      spyTracker = sinon.stub(tracker, 'Client');
    });

it('should do the request to get the activities from projects.', async () => {
      spyTracker.callsArgWith(1, null, [true, 'token']);
      // spyTracker.projects.all.returns('token');
      await PivotalTrackerApi.getPivotalProjects('token');
      sinon.assert.threw(spyTracker);
spyTracker.restore();
    });

这有什么问题?如果有人可以帮助我,那就太好了。

【问题讨论】:

  • that throws me an error an 你说的错误,多有趣,有什么特别的错误吗? :p
  • 哦,对不起,理解错了,我想说的是,这实际上给我一个测试执行的错误,我不知道如何测试它
  • 好的,让我尽可能用简明的英文发布...请在问题中包含您遇到的错误,因为“错误”信息不足,您可能还没有如果您不打算透露错误是什么,请提到它
  • 再次抱歉,错误是这个:Error: the function [Function] was thrown, throw an Error :).;抱歉,正在学习,谢谢!

标签: javascript object promise callback sinon


【解决方案1】:

getPivotalProjects 可以简化为:

export async function getPivotalProjects(token) {
  const clientTracker = new tracker.Client(token);
  await new Promise((resolve, reject) => {
    clientTracker.projects.all((error, projects) => (projects ? resolve(projects) : reject(error)));
  });
}

...可以这样测试:

let clientStub;

beforeEach(() => {
  clientStub = sinon.stub(tracker, 'Client');
});

it('should do the request to get the activities from projects.', async () => {
  const allSpy = sinon.spy();
  clientStub.callsFake((token) => ({ projects: { all: allSpy } }));
  const promise = PivotalTrackerApi.getPivotalProjects('token');
  sinon.assert.calledWith(clientStub, 'token');  // Success!
  sinon.assert.called(allSpy);  // Success!
  const callback = allSpy.lastCall.args[0];
  callback(null, 'my projects');
  const result = await promise;
  expect(result).to.equal('my projects');  // Success!
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多