【问题标题】:Sinon stubbing helper method defined in same file在同一文件中定义的 Sinon 存根辅助方法
【发布时间】:2016-12-15 18:54:42
【问题描述】:

所以我有一个文件,user-database,看起来像这样:

export function foo(id: number): Promise<boolean> {
  return new Promise<boolean>((resolve, reject) => {
    findSomething(id)
    .then((data) => {
      //do something with data
    })
  }
}

export function findSomething(id: number): Promise<Object> {
  return new Promise<Object> ((resolve, reject) => {
    let query = 'SELECT * FROM user';
    db.executeQuery(query);
    .then(data) => {
      if(data.length < 1) { reject(new Error('whoops')); }
      resolve(data);
    }, (err) => {
      reject(err);
    })
  })
}

所以我正在为外部函数foo 使用Sinon 编写单元测试,因此我想存根它调用的函数findSomething。我这样做如下:

import * as user_db from '../../src/user-database';

describe('POST /someEndpoint', () => {
  describe('when successful', () => {
    let stub;

    beforeEach(function() {
      stub = sinon.stub(user_db, 'findSomething');
    });

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

    it('should respond with 200', function(done) {
      stub.returns(anObjectIPredefine);

      request(server)
        .post(basePath)
        .send(aPayloadIPredefine)
        .expect(200, done);
    });
  }
}

当我运行测试时,我没有看到我告诉存根返回这个stub.returns(anObjectIPredefine) 的对象。相反,我实际上让函数findSomething 正常执行并从dB 中获取数据。有什么明显的我做错了吗?我唯一的猜测是stub = sinon.stub(user_db, 'findSomething') 不是用于存根与正在测试的函数在同一范围内定义的函数的正确语法。我找不到替代语法。

【问题讨论】:

    标签: node.js unit-testing typescript sinon sinon-chai


    【解决方案1】:

    所以我最终做的是将我希望存根的函数移动到不同的文件中。完成后,存根按预期工作。可能不是最好的解决方案,但对于处于类似情况的任何人来说绝对是一个快速的创可贴。

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 2017-02-13
      • 1970-01-01
      • 2019-02-21
      • 2014-03-24
      • 2011-11-19
      • 1970-01-01
      • 2012-11-04
      • 2013-06-11
      相关资源
      最近更新 更多