lundi 24 octobre 2016

test prereqiusities for tabular tests

Let's say I am attempting to test an api that is supposed to handle presence or absence of certain object fields.

Let's say I have tests like so:

(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))

This works as you would expect and the tests pass. Now I am attempting to refactor this using tabular like so:

(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")

Which results in:

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?

How do I use tabular data with prerequisites? Or, more generically, what would be a good way to write these tests?

Aucun commentaire:

Enregistrer un commentaire