Jest - как использовать макетный экземпляр класса - PullRequest
1 голос
/ 23 мая 2019

В моем приложении React для внешнего интерфейса я использую библиотеку auth0-js для аутентификации. Экспортирует WebAuth класс. В коде я создаю экземпляр, вызывая WebAuth Примерно так:

import { WebAuth } from 'auth0-js'


const auth0Client = new WebAuth({ /* some options */ })

/* 
...
using auth0Client
...
*/

Я создал файл, который называется так же, как имя библиотеки в моей папке __mocks__. Благодаря этому Джест автоматически издевался над этой библиотекой.

// __mocks__/auth0-js.ts
const auth0Mock = jest.genMockFromModule('auth0-js')

module.exports = auth0Mock

Но в моих тестах я хочу проверить, был ли вызван какой-то метод на auth0Client. Как я могу это сделать?

1 Ответ

1 голос
/ 23 мая 2019

Вот простой рабочий пример, с которого можно начать:

__ mocks __ / auth0-js.ts

module.exports = jest.genMockFromModule('auth0-js')

code.ts

import { WebAuth } from 'auth0-js'

const auth0Client = new WebAuth({ domain: 'your domain', clientID: 'your client id'});
auth0Client.authorize({ audience: 'your audience' });

code.test.ts

import { WebAuth } from 'auth0-js';
import './code';  // <= run code.ts

test('code', () => {
  expect(WebAuth).toHaveBeenCalledWith({ domain: 'your domain', clientID: 'your client id' });  // Success!
  const auth0Client = (WebAuth as jest.Mock).mock.instances[0];  // <= get the WebAuth instance
  expect(auth0Client.authorize).toHaveBeenCalledWith({ audience: 'your audience' });  // Success!
})

WebAuth является фиктивной функцией, поэтому, когда она используется для создания нового экземпляра, она будет записывать созданный экземпляр.

Во время теста вы можете получить WebAuth и использовать его для извлечения созданного экземпляра.

Получив экземпляр, вы можете проверить его функции (также фиктивные), чтобы узнать, были ли они вызваны так, как ожидалось.

...