2016-03-31 14 views
0

Ich habe versucht, WebMock.disable_net_connect! in vielen Orten zu setzen, aber wie in meinem letzten Test empfohlen Ich habe es in spec_helper.rb wie folgt aus:WebMock.disable_net_connect! nicht mit rspec arbeiten (kein VCR)

require 'webmock/rspec' 
WebMock.disable_net_connect!(allow_localhost: true) 

Meine spec ist die folgende:

describe Client do 
    describe '#get_something' do 
    context 'when post params are valid' do 
     it 'returns a response' do 
     request = stub_request(:post, 'https://myurl.com') 
      .to_return(my_response) 

     result = client.get_something(params) 

     expect(WebMock).to have_requested(:post, 'https://myurl.com') 
     end 
    end 
    end 
end 

Hmm, natürlich, dass mein Kunde den Anruf macht:

class Client 
    def get_something(params) 
    RestClient.post @url, params 
    end 
end 

Es mit dieser Meldung fehlschlägt:

Failure/Error: end 
     The request GET https://myurl.com/ was expected to execute 1 time but it executed 0 times 

     The following requests were made: 

     No requests were made. 
     ============================================================ 

Ich benutze Schienen 4.1.8, rspec 3.1.7, rspec-Schienen 3.1.0 und webmock 1.8.11. Momentan erstelle ich einen Mock eines http_clients, um Dinge zum Laufen zu bringen, aber jede Hilfe hier wird geschätzt! Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen!

+0

Could Sie versuchen 'expect (request) .to have_be en_requested'? –

+0

@HoMan hat es schon versucht und ich bekomme den gleichen Fehler. Die Sache ist, dass 'disable_net_connect' nicht funktioniert, also wird die stubed Anfrage nie angefordert ... –

+0

Ahhh. Ich denke, da der allow_localhost von URL abhängig ist. Versuchen Sie, 'https: // myurl.com' in' localhost: 3000' oder etwas zu ändern –

Antwort

0

Sie sollten mit diesem stattdessen:

WebMock.allow_net_connect!

Alternativ können Sie auch tun,

WebMock.disable_net_connect(allow: ['https://myurl.com'])

Wie in der Dokumentation von WebMock gezeigt:

WebMock.allow_net_connect! 

stub_request(:any, "www.example.com").to_return(:body => "abc") 

Net::HTTP.get('www.example.com', '/') # ===> "abc" 
+0

Soweit ich das verstanden habe, ist das Standardverhalten, ich brauche nicht einmal 'WebMock.allow_net_connect!'. Ich möchte das gleiche tun, hier getan: https://robots.thoughtbot.com/how-to-stub-external-services-in-tests –

+0

'WebMock.disable_net_connect (erlauben: ['https://myurl.com' ]) 'lässt https://myurl.com jedoch nur passieren? –