Как проверить ответ от API при написании теста с огурцом - PullRequest
0 голосов
/ 01 сентября 2018

Я работаю над проектом Rails, где мне нужно протестировать API с помощью Cucumber. Я должен проверить API типа POST, и мне нужно проверить его ответ. Я пробовал что-то вроде:

When(/^I make abc API call$/) do
  @url = 'http://example.com/api/abc'
  @params = '{
                data: {
                  type: "abc",
                  attributes: {
                    title: "example",
                    all_day: "0",
                    start_date: "1409175049",
                    end_date: "1409175049"
                  }
                }
              }'
  @login_token = 'pHufpGplLTYJnmWh5cqKoA'
end

Then(/^It should return success for abc$/) do
  post 'http://example.com/api/abc', body: @params,
                                 headers: { 'Accept' => 'application/json',
                                            'login_token' => @login_token,
                                            'Content-Type' => 'application/json' }
end

Но я не уверен, как проверить код состояния из ответа и какие-либо атрибуты из ответа. Что-то вроде:

Then(/^It should return success for abc$/) do
  post 'http://example.com/api/abc', body: @params,
                                 headers: { 'Accept' => 'application/json',
                                            'login_token' => @login_token,
                                            'Content-Type' => 'application/json' }
  .to_return(status: 200, body: '{ title: "abc" }')
end

Как мне этого добиться?

1 Ответ

0 голосов
/ 01 сентября 2018

Если вы используете Capybara, это должно работать для вас:

Then /^I should get a response with status (\d+)$/ do |status|
  response = post 'http://example.com/api/abc', body: @params,
                                                headers: { 'Accept' => 'application/json',
                                                           'login_token' => @login_token,
                                                           'Content-Type' => 'application/json' }
  response.status_code.should include(status.to_i)
end
...