user866364
user866364

Reputation:

Mock modules that has a class and other attributes

I'm trying to mock twilio module but it's being a pain. I'm new to Jest and I've read docs but it's not clear how should I mock a class and a type.

This is the code that I'm trying to mock:

const Twilio = require('twilio')
const client = new Twilio('sid', 'auth')
const response = new Twilio.twiml.VoiceResponse()

The part of constructor new Twilio is doing fine:

jest.mock('twilio', () => class {
  constructor (accountSid, authToken) {
    this.conferences = {
      list () {
        return mockTwilioListConferences()
      }
    }
  }
})

But how can I mock the part new Twilio.twiml.VoiceResponse()?

Upvotes: 0

Views: 825

Answers (1)

philnash
philnash

Reputation: 73065

Twilio developer evangelist here.

Disclaimer, I haven't tried this, but here's how I believe this works.

The twiml property on the Twilio class is just that, a property. In your mock you instantly return a new anonymous class, but if you add the property to the class itself before you return you should find it is then part of your mock.

For example:

jest.mock('twilio', () => {
  const mockClass = class {
    constructor (accountSid, authToken) {
      this.conferences = {
        list () {
          return mockTwilioListConferences()
        }
      }
    }
  }
  mockClass.twiml = {
    // complete your mock implementation here
  }
  return mockClass;
);

Let me know if that helps at all.

Upvotes: 1

Related Questions