【问题标题】:Testing a MySQL INSERT result with Node.js/Sinon使用 Node.js/Sinon 测试 MySQL INSERT 结果
【发布时间】:2016-09-26 14:10:15
【问题描述】:

我要测试的应用程序代码:

create(params) {
  let result = {};
  try {
    result = await this.db.query('/* some query */');
  } catch (e) {
    throw new Error('Error creating User', e);
  }
  return this._getById(result.insertId);
}

我在同一个类中有 _getById 方法,它完全按照它所说的......

还有我目前的测试(通过 Ava 运行):

test('it should create a user', async t => {
  const db = mock({
    query: () => {
    },
  });
  const userObj = {
        // some params
  };
  const user = new Users({
    db: db.object,
  });
  const call = {
    request: userObj,
  };
  const result = await user.create(call);
    // test?
});

如果我尝试基于result 变量测试任何内容,即。新创建的用户,我收到错误"Cannot read property 'insertId' of undefined"。我用 Sinon 测试这个create 方法是否会返回一个新创建的“用户”的最佳选择是什么?

【问题讨论】:

    标签: mysql node.js sinon ava


    【解决方案1】:

    我认为你有 "Cannot read property 'insertId' of undefined" 因为下面的模拟没有返回任何东西

    const db = mock({
      query: () => {
      },
    });
    

    如果你返回类似的东西

    const db = mock({
      query: () => {
        return {
          username: "username"
        }
      },
    });
    

    在测试中,结果将具有值,您应该能够使用 expect 来检查您是否有预期的结果:

    {
      username: "username"
    } 
    

    这个特定测试中的问题始于 mock 没有返回某些东西并且调用 mock 覆盖了您在此处分配的值

    let result = {};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 2017-12-14
      • 2018-03-15
      • 2021-09-27
      • 2023-03-10
      相关资源
      最近更新 更多