Предположим, что я пытаюсь проверить api, который должен обрабатывать наличие или отсутствие определенных полей объектов.Предварительные условия испытаний для табличных испытаний; как работает табличная работа?
Скажем, у меня есть тесты, как так:
(def without-foo
{:bar "17"})
(def base-request
{:foo "12"
:bar "17"})
(def without-bar
{:foo "12"})
(def response
{:foo "12"
:bar "17"
:name "Bob"})
(def response-without-bar
{:foo "12"
:bar ""
:name "Bob"})
(def response-without-foo
{:bar "17"
:foo ""
:name "Bob"})
(facts "blah"
(against-background [(external-api-call anything) => {:name => "Bob"})
(fact "base"
(method-under-test base-request) => response)
(fact "without-foo"
(method-under-test without-foo) => response-without-foo)
(fact "without-bar"
(method-under-test without-bar) => response-without-bar))
Это работает, как можно было бы ожидать и тесты проходят. Теперь я пытаюсь реорганизовать это, используя табличный так:
(def request
{:foo "12"
:bar "17"})
(def response
{:foo "12"
:bar "17"
:name "Bob"})
(tabular
(against-background [(external-api-call anything) => {:name "Bob"})]
(fact
(method-under-test (merge request ?diff) => (merge response ?rdiff))
?diff ?rdiff ?description
{:foo nil} {:foo ""} "without foo"
{} {} "base case"
{:bar nil} {bar ""} "without bar")
что приводит:
FAIL at (test.clj:123)
Midje could not understand something you wrote:
It looks like the table has no headings, or perhaps you
tried to use a non-literal string for the doc-string?
В конечном итоге я закончил с:
(tabular
(fact
(method-under-test (merge request ?diff) => (merge response ?rdiff) (provided(external-api-call anything) => {:name "Bob"}))
?diff ?rdiff ?description
{:foo nil} {:foo ""} "without foo"
{} {} "base case"
{:bar nil} {bar ""} "without bar")
который проходит. Мой вопрос. Как функция tabular
отличается от функции facts
, и почему один из них принимает against-background
, а другой взрывается?
благодарит за ответ. Почему это? Какое чтение я должен делать, чтобы понять разницу между табличными и фактами? Я уверен, что вложенность не совсем ... –
Я расширил свой ответ, чтобы рассмотреть другую возможность. –