2015-07-23 1 views
0

Je suis en train d'écrire une gemme qui agit comme un client pour une API distante, donc j'utilise webmock pour simuler l'API distante, en testant aussi avec Cucumber avec rspec-mock present.Dans Concombre sur Ruby avec rspec, comment puis-je attendre/affirmer un appel webmocked dans une clause Then?

Dans le cadre de mes tests Cucumber, j'ai l'intention de remplacer mon API par une clause Given, mais je voudrais préciser que l'API distante est appelée dans une clause Then.

Un exemple très basique serait:

fichier Feature

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 

Étape définition

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 

La question: Comment puis-je vérifier que mon google talon h comme appelé? Note: Je sais que je pourrais utiliser la syntaxe expect(a_request(...)) ou expect(WebMock).to ... mais je pense que je vais répéter ce qui est défini dans ma clause Given.

Répondre

1

Je réponds moi-même, mais il serait bon pour quelqu'un de vérifier cela est correct et/ou n'a pas les principaux écueils:

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 

Les bits sont à noter l'affectation des @request et l'attente placée sur dans la clause Then.

Dans un test limité de deux scénarios distincts, cette approche semble fonctionner.

+0

J'adore webmock. Pas assez pour l'épouser. Mais c'est très satisfaisant. –