В Cucumber на Ruby с w/rspec, как я могу ожидать/утверждать веб-вызов в предложении Then?

Я пишу гем, который действует как клиент для удаленного API, поэтому я использую webmock, чтобы издеваться над удаленным API, тестируя с Cucumber с присутствующим rspec-mock.

В рамках моих тестов Cucumber я намерен заглушить свой API в предложении Given, но затем я хотел бы указать, что удаленный API вызывается в предложении Then.

Действительно простой пример:

Файл функции

Scenario: Doing something that triggers a call
  Given I have mocked Google
  When I call my library
  Then it calls my Google stub
  And I get a response back from my library

Определение шага

Given /I have mocked my API/ do
  stub_request(:get, 'www.google.com')
end

When /I call my library/ do
  MyLibrary.call_google_for_some_reason
end

Then /it calls my Google stub/ do
  # Somehow test it here
end

Вопрос: как я могу убедиться, что моя заглушка Google вызывалась?

Примечание: я знаю, что мог бы использовать синтаксис expect(a_request(...)) или expect(WebMock).to ..., но мне кажется, что я буду повторять то, что определено в моем предложении Given.


person otupman    schedule 23.07.2015    source источник


Ответы (1)


Я отвечаю на это сам, хотя было бы хорошо, если бы кто-то подтвердил, что это правильно и/или не имеет серьезных ошибок:

Given /I have mocked my API/ do
  @request = stub_request(:get, 'www.google.com')
end

Then /it calls my Google stub/ do
  expect(@request).to have_been_made.once
end

Биты, на которые следует обратить внимание, - это назначение @request и ожидание, возложенное на него в предложении Then.

В ограниченном тесте двух отдельных сценариев этот подход работает.

person otupman    schedule 23.07.2015
comment
Я люблю вебмок. Недостаточно, чтобы выйти за него замуж. Но вполне устраивает. - person Dave McNulla; 23.07.2015