更改功能后,Sinn测试失败

时间:2019-08-14 05:56:40

标签: javascript node.js sinon

我有这个测试:

describe('createNote', () => {
  beforeEach(() => {
    res = {
      json: sinon.spy(),
      sendStatus: sinon.spy(),
    };
  });

  afterEach(() => {
    noteService.createUserNote.restore();
  });

  it('should return user note object', async () => {
    // Arrange
    modelResponse = {
      id: 1,
      userId: req.user.id,
      ...req.body,
    };
    sinon.stub(noteService, 'createUserNote')
      .resolves(modelResponse);

    // Act
    await userController.createNote(req, res);

    // Assert
    sinon.assert.calledWith(
      noteService.createUserNote,
      req.user,
      req.body.note,
    );
    sinon.assert.calledWith(res.json, { note: modelResponse });
  });

它在第sinon.assert.calledWith(res.json, { note: modelResponse });行上失败

我不太了解sinon,所以我不确定为什么。

这是我的userController代码:

createNote: async (req, res, next) => {
  try {
    const createNote = await noteService.createUserNote(
      req.user,
      req.body.note,
    );
    const note = await noteService.getUserNote(
      req.user.id,
      createNote.id,
    );
    return res.json({ note });
  } catch (err) {
    return next(err);
  }
},

我最近对此进行了更改,因此假设我所做的某些操作导致测试失败:

createNote: async (req, res, next) => {
  try {
    const note = await noteService.createUserNote(
      req.user,
      req.body.note,
    );
    return res.json({ note });
  } catch (err) {
    return next(err);
  }
},

这是我得到的错误:

  1) User userController
       createNote
         should return user note object:
     AssertError: async (user, text) => {
    const [note] = await db.Note.createUserNote(user.id, text, db);
    await emailService.userAlert(text, user.name);
    return note;
  } is not stubbed
      at Object.fail (node_modules/sinon/lib/sinon/assert.js:106:21)
      at /opt/atlassian/pipelines/agent/build/node_modules/sinon/lib/sinon/assert.js:35:24
      at Array.forEach (<anonymous>)
      at verifyIsStub (node_modules/sinon/lib/sinon/assert.js:22:5)
      at Object.assert.(anonymous function) [as calledWith] (node_modules/sinon/lib/sinon/assert.js:77:9)
      at Context.it (app/__tests__/controllers/user/userController.test.js:56:20)
      at <anonymous>

任何人都可以解释出什么问题以及如何解决吗?

1 个答案:

答案 0 :(得分:1)

您还需要模拟 getUserNote 。更改后,您将从 getUserNote 获得注释,然后将其发送到 res.json

但是在测试用例中,您没有将其存根。尝试在测试用例中添加它:

sinon.stub(noteService, 'getUserNote')
      .resolves(modelResponse);