Тестовая последовательность выборочных данных, сгенерированных из 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))))))