Почему моя шутка влияет на очередной тест? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть тестовые случаи:

import { loginPagePresenter } from './LoginPagePresenter'
import { apiGateway } from 'config/gatewayConfig'
import { authRepository } from './AuthRepository'

it('should update the auth repository user with the token, email and set authenticated observable when successesful api call', async () => {
  const authenticatedStub = {
    'success': true,
    'message': 'successful login',
    'email': 'a@b.com',
    'token': '123'
  }

  apiGateway.post = jest.fn().mockResolvedValue(authenticatedStub)

  loginPagePresenter.email = 'a@b.com'
  loginPagePresenter.password = 'aaabbbcom'
  await loginPagePresenter.submit()
  expect(authRepository.user.token).toBe('123')
  expect(authRepository.user.email).toBe('a@b.com')
  expect(authRepository.authenticated).toBe(true)
})

it('should not update the user model when NOT successesful api call', async () => {

  const notAutenticatedStub = {
    'success': false,
    'message': 'bad login',
    'email': '',
    'token': ''
  }

  apiGateway.post = jest.fn().mockResolvedValue(notAutenticatedStub)

  loginPagePresenter.email = 'a@b.com'
  loginPagePresenter.password = 'aaabbbcom'
  await loginPagePresenter.submit()
  expect(authRepository.user.token).toBe(null)
  expect(authRepository.user.email).toBe(null)
  expect(authRepository.authenticated).toEqual(false)
})

Первый тест влияет на второй тест.Другими словами, если я закомментирую первый тест, тогда второй тест работает.Я проверил код производства он работает отлично.Но насмешливая функция первого оказывает побочный эффект на второго (похоже, я не могу сбросить возвращенную разрешенную функцию).

Может кто-нибудь объяснить, как это исправить?

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете попытаться добавить jest.clearAllMocks() в свой тестовый файл внутри beforeEach(), например:

import { loginPagePresenter } from './LoginPagePresenter'
import { apiGateway } from 'config/gatewayConfig'
import { authRepository } from './AuthRepository'

beforeEach(() => {
    jest.clearAllMocks();
});

it('should update the auth repository user ...', async () => {
  ...
})

it('should not update the user model when NOT ...', async () => {
  ...
})

, который очистит все макеты перед каждым тестом.

Или вы можете очистить каждый отдельный макет с помощью mockFn.mockClear()

Подробнее об этом здесь: jest.clearAllMocks () и mockFn.mockClear ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...