Тестовая последовательность выборочных данных, сгенерированных из clojure.spec

контекст

  • У меня есть функция, которая работает над структурой данных.
  • Я написал спецификацию для структуры данных, над которой работает эта функция.
  • Эта функция возвращает компонент реагента, который отображается в браузере (PhantomJS)
  • В спецификации есть несколько дополнительных ключей, и в зависимости от того, существуют ли эти ключи в данных, когда они передаются в функцию, это повлияет на вывод (компонент, который будет отображаться в браузере) вышеупомянутой функции.
  • Я ищу использовать clojure.test чтобы сравнить значения структуры данных, передаваемой в функцию, генерирующую компонент, со значениями, извлеченными из визуализированного элемента, я не собираюсь сравнивать простой модульный тест или сравнение ввода-> вывода.

проблема

С звонка generate или же sample в генератор спецификаций иногда будут включать или опускать необязательные поля, я хотел бы перебрать достаточно большой набор данных, сгенерированных с использованием sample и протестировать каждую из структур данных, но я не знаю "правильного" или идиоматического способа сделать это.

я использовал are в clojure.test до того, что замечательно, но так как я тестирую против рендеринга компонента в браузере, и are проверяет input->output, это не похоже на подходящий инструмент для работы.

Буду очень признателен за советы по общепринятой практике здесь или функции language/clojure.test, которые позволят мне сделать это наиболее идиоматическим способом.

1 ответ

сравнить значения структуры данных, переданные функции, генерирующей компонент, со значениями, извлеченными из визуализированного элемента

Если возможно, я бы использовал s/fdef с :args, :ret, а также :fn аргументы, чтобы указать отношения между входом и выходом вашей функции, а затем check функция. В разделе тестирования спецификации есть пример.

переберите достаточно большой набор данных, сгенерированных с использованием выборки, и протестируйте каждую из структур данных

Это по сути то, что check делает.

Что касается интеграции clojure.test, вы можете check функционирует как часть набора тестов следующим образом:

(deftest foo-test
  (is (not (:check-failed (st/summarize-results (st/check `foo))))))
Другие вопросы по тегам