有没有功能来测试在js中具有回调的对象实例?

加布里埃尔·富恩特斯

我使用sinon对具有回调函数的对象实例进行存根,我该如何测试呢?我不知道如何测试,这使我出错。

这是在sinon和mocha中使用js。

函数是:

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();
    });

这有什么问题?如果有人可以帮助我会很棒。

布赖恩·亚当斯

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!
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章