'Mocha js TypeError: Cannot read property 'calledWith' of undefined

I have created a function using sequelize orm

const { User } = require('./models')

const save = async ({ id, ...data }) => {
  const user = await User.findOne({ where: { id } })
  if (user) return await user.update(data)
  return null
}

module.exports = save

Now i have created a unit test for it.

const { expect } = require('chai')
const { match, stub, sinon, resetHistory } = require('sinon')
const proxyquire = require('proxyquire')

const {
  sequelize,
  dataTypes,
  checkModelName,
  checkPropertyExists,
  makeMockModels
} = require('sequelize-test-helpers')

const model = require('./src/models/models')

describe('Checking table element and function',() => {
    const User = { findOne: stub() }
    const mockModels = makeMockModels({ User })
    const save = proxyquire('../sentinelFunction', {
        './models': mockModels
    })
    
    const id = 1
    const data = {
        user_name: 'Tarique',
        gate_no: 12,
    }

    const fakeUser = { id, ...data, update: stub() }

    let result

    context('user does not exist', () => {
        before(async () => {
            mockModels.User.findOne.resolves(undefined)
            result = await save({ id, ...data })
        })

        after(resetHistory)

        it('called User findOne', () => {
            expect(mockModels.User.findOne).to.have.been.called
        })

        it("didn't call user.update", () => {
            expect(fakeUser.update).not.to.have.been.calledWith(match(data))
        })
    })
})

Now i am getting an 2 error as

  1. Checking table element and function user does not exist called User findOne: TypeError: Cannot read property 'calledWith' of undefined

  2. Checking table element and function user does not exist didn't call user.update: Error: Invalid Chai property: calledWith

Help me fix it please.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source