Тестирование автоматов¶
В общем, тестирование конечных автоматов и диаграмм состояний должно выполняться путем тестирования общего поведения машины; поэтому:
В текущем состоянии, когда происходит некоторая последовательность событий, тестируемая система должна находиться в определенном состоянии или показывать определенные выходные данные.
Такое тестирование следует из поведенческой разработки (BDD) и стратегии тестирования методом черного ящика. Не следует напрямую проверять внутреннюю работу машины; вместо этого следует проверить наблюдаемое поведение. По смыслу, тестирование автоматов ближе к интеграционным тестам, чем к модульным тестам.
Тестирование чистой логики¶
Если вы не хотите тестировать побочные эффекты, такие как выполнение действий или вызов акторов, и вместо этого хотите протестировать чистую логику, можно использовать функцию machine.transition(...)
, чтобы убедиться, что определенное состояние достигнуто при заданном исходное состояние и событие:
1 2 3 4 5 6 7 8 9 10 11 |
|
Тестирование служб¶
Поведение и результат работы служб можно проверить, заявив, что они в конечном итоге достигают ожидаемого состояния, учитывая начальное состояние и последовательность событий:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Подсказка
Имейте в виду, что большинство платформ тестирования имеют тайм-аут по умолчанию, и ожидается, что асинхронные тесты завершатся до этого тайм-аута. При необходимости настройте тайм-аут (например, jest.setTimeout(timeout)
) для более длительных тестов.
Подмена (mock) реализации¶
Поскольку действия и запуск / создание акторов являются побочными эффектами, их выполнение в тестовой среде может быть нежелательным. Вы можете использовать параметр machine.withConfig(...)
, чтобы изменить детали реализации определенных действий:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|