首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一个函数可以测试在js中有回调的对象实例?

有没有一个函数可以测试在js中有回调的对象实例?
EN

Stack Overflow用户
提问于 2019-03-23 11:35:10
回答 1查看 55关注 0票数 2

我正在使用sinon来存根一个对象的实例,该对象的实例在一个带有回调的函数中,我该如何测试它呢?我不知道如何测试它,这抛出了一个错误。

这是将js与sinon和mocha一起使用。

该函数为:

代码语言:javascript
复制
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();

测试结果是:

代码语言:javascript
复制
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();
    });

那有什么问题呢?如果有人能帮我,那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-23 12:09:05

getPivotalProjects可以简化为:

代码语言:javascript
复制
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)));
  });
}

...and可以像这样测试它:

代码语言:javascript
复制
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!
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55310380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档