Javascript 更改功能后,Sinon测试失败

Javascript 更改功能后,Sinon测试失败,javascript,node.js,sinon,Javascript,Node.js,Sinon,我有这个测试: describe('createNote', () => { beforeEach(() => { res = { json: sinon.spy(), sendStatus: sinon.spy(), }; }); afterEach(() => { noteService.createUserNote.restore(); }); it('should return user note

我有这个测试:

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})行失败

我真的不理解西农,所以我不知道为什么

这是我的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)用户用户控制器
createNote
应返回用户注释对象:
AssertError:async(用户,文本)=>{
const[note]=wait db.note.createUserNote(user.id,text,db);
等待emailService.userAlert(文本、用户名);
退货单;
}没有存根
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
在Array.forEach()处
在verifyIsStub(node_modules/sinon/lib/sinon/assert.js:22:5)
at Object.assert.(匿名函数)[as calledWith](node_modules/sinon/lib/sinon/assert.js:77:9)
在Context.it(app/__tests\u_/controllers/user/userController.test.js:56:20)
在

有人能解释什么地方出了问题以及如何解决吗?

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

但在测试用例中,您没有将其删除。尝试在测试用例中添加以下内容:

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

怎么了?