Jest - макет свойства и функции из момента времени - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь смоделировать свойство tz и функцию с использованием jest, но я не знаю, чтобы смоделировать обе вещи вместе:

Если запустить что-то вроде:

jest.mock('moment-timezone', () => () => ({weekday: () => 5}))

jest.mock('moment-timezone', () => {
  return {
    tz: {

    }
  }
})

Я могу смоделировать атрибутtz или инструкция moment().Как я могу написать макет для покрытия этого кода?

const moment = require('moment-timezone')

module.exports.send = () => {
  const now = moment()
  moment.tz.setDefault('America/Sao_Paulo')
  return now.weekday()
}

Спасибо

1 Ответ

0 голосов
/ 20 октября 2018

Вы можете воспользоваться вторым параметром jest.mock(), который позволит вам указать пользовательскую реализацию проверяемого модуля для использования в тестировании.

Внутри этой пользовательской реализации,Вы также можете определить некоторые вспомогательные помощники для эмуляции ожидаемых значений реализации (например, weekday()).

// send-module.test.js

jest.mock('moment-timezone', () => {
    let weekday
    const moment = jest.fn(() => {
        return {
            weekday: jest.fn(() => weekday),
        }
    })
    moment.tz = {
        setDefault: jest.fn(),
    }
    // Helper for tests to set expected weekday value
    moment.__setWeekday = (value) => weekday = value
    return moment;
})

const sendModule = require('./send-module')

test('test', () => {
    require('moment-timezone').__setWeekday(3)
    expect(sendModule.send()).toBe(3)
})

Обратите внимание, что ручное предоставление макета для файла теста может быть утомительным и повторяющимся, если у модуля, который подвергается макету, естьОгромная поверхность API.Чтобы рассмотреть последний случай, вы можете рассмотреть возможность создания некоторых ручных макетов, чтобы сделать их многократно используемыми (т. Е. Используя директиву __mocks__), и дополнить ее, используя jest.genMockFromModule().

В документации Jest есть некоторые указания по этому поводу.

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