Использование json_spec gem в 'path' должно включать: 'step не работает, как я ожидал - PullRequest
1 голос
/ 16 февраля 2012

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

Я использую комбинацию огурца вместе с rest-client и json_spec гемов для создания набора тестов для полноценного API.Подход аналогичен описанному в Книге огурцов Обратите внимание, что в этом случае, поскольку «клиент» является разработчиком, «язык бизнеса» гораздо более технический, чем вы обычно выражали бы в огурцеСценарии

У меня проблема с шагом огурца json_spec "Тогда JSON в" пути "должен включать:"

Мой сценарий выглядит следующим образом

Scenario Outline:  GET to OR Packages for specific package uuid returns proper data
  Given I create a request body from the following JSON data
  """
  {
    "package":
    {
      "name": "anothertestpackage", 
      "description": "This is a test, testing 4 5 6", 
      "package_type" : <package_type>, 
      "duration": 30, 
      "start_date": "2012-03-01T08:00:00Z"
    }
  }
  """
  And I have the URI for a new: package made in: OR from the request body
  When I make a: GET request to the URI for: my new package with no query string
 Then the JSON at "package" should include:
  """
  {
    "name": "anothertestpackage", 
    "description": "This is a test, testing 4 5 6", 
    "package_type" : <package_type>, 
    "duration": 30, 
    "start_date": "2012-03-01T08:00:00Z"
  }
  """

  Examples:
    | package_type |
    | "IMPRESSIONS" |
    | "CLICKS" |
    | "LEADS" |

Исодержимое last_json похоже на то, что выполняется шаг Тогда

{
  "package": {
    "status": "NEW",
    "account": {
      "resource_uri": "/api/v0001/accounts/fecdbb85a3584ca59820a321c3c2767d"
    },
    "name": "anothertestpackage",
    "package_type": "IMPRESSIONS",
    "margin_goal": "0.5000",
    "duration": 30,
    "resource_uri": "/api/v0001/packages/fecdbb85a3584ca59820a321c3c2767d/feea333776c9454c92edab8e73628cbd",
    "start_date": "2012-03-01T08:00:00Z",
    "description": "This is a test, testing 4 5 6"
  }
}

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

Expected included JSON at path "package" (RSpec::Expectations::ExpectationNotMetError)
features\OR\API\OR_API_Packages.feature:70:in `Then the JSON at "package" should include:'

ЭтоНеясно, что эта ошибка говорит мне с точки зрения того, что не так.Это ошибка пользователя?я должен использовать другое средство, чтобы определить, присутствуют ли ожидаемые пары ключ: значение в JSON, возвращенном API?На самом деле я не вижу примеров такого сравнения в ваших файлах объектов для драгоценного камня, поэтому трудно понять, для чего это было не то, для чего предназначалось включение.

1 Ответ

1 голос
/ 16 февраля 2012

Хех, только что получил ответ от одного из авторов драгоценных камней через другое место.Будет публиковать здесь

Включить было предназначено больше для простого включения значения, в основном в массивах.Если ответ индекса API возвратил массив объектов, вы могли бы утверждать, что массив включает в себя один целый идентичный объект.Посмотрите примеры соответствия для примеров.

Для того, что вы делаете, я бы разбил его на отдельные шаги:

Then the JSON at "package/name" should be "anothertestpackage"
And the JSON at "package/description" should be "This is a test, testing 4 5 6"
And the JSON at "package/package_type" should be <package_type>
And the JSON at "package/duration" should be 30
And the JSON at "package/start_date" should be "2012-03-01T08:00:00Z"

Или вы можете использовать формат таблицы длясделать это более кратким, например,

Then the JSON at "package" should have the following:
   | name         | "anothertestpackage"            |
   | description  | "This is a test, testing 4 5 6" |
   | package_type | <package_type>                  |
   | duration     | 30                              |
   | start_date   | "2012-03-01T08:00:00Z"          |

Надеюсь, это поможет!Спасибо за вопрос.

Действительно, это очень помогло, спасибо 'laserlemon'

...