0

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

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方法是否会返回一个新创建的“用户”的最佳选择是什么?

4

1 回答 1

0

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

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

如果你返回类似的东西

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

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

{
  username: "username"
} 

这个特定测试中的问题始于模拟不返回某些内容并且调用模拟覆盖了您在此处分配的值

let result = {};
于 2016-09-26T14:36:18.810 回答