2009-10-02 2 views
0

다음은 app/models/websites.rb입니다.모카 응답 + 모카 + 오이

class Masterpiece < ActiveRecord::Base 
    validates_presence_of :title, :link 
    validates_uri_existence_of :link, :allow_redirect => false 
end 

두 번째 유효성 검사는 플러그인 Validates Existence of URI 플러그인입니다.

다음은 features/support/mocha.rb 파일입니다.

require 'mocha' 
World(Mocha::API) 

Before do 
    mocha_setup 
    @http_mock = mock('Net::HTTPResponse') 
    @http_mock.stubs(:code => '200', :message => "OK", :content_type => "text/html", :body => '<title>Test</title><body>Body of the page</body>') 
    Net::HTTP.expects(:get_response).returns(@http_mock) 
    #Website.expects(:validates_uri_existence_of).returns(true) 
end 

After do 
    begin 
    mocha_verify 
    ensure 
    mocha_teardown 
    end 
end 

그러나 오이 기능을 실행하려고하면 레코드를 만들려고합니다. 그리고 위의 플러그인을 저장하기 전에 Net을 통해 응답을 얻으려고 시도합니다. 괜찮아.
그러나 테스트 환경에서 조롱을 받고 싶을 때 모카를 사용하려고합니다.

테스트를 원활하게 실행하려면 넷 응답 또는 validates_uri_existence_of 클래스 메소드를 조롱하는 코드를 어떻게 작성해야합니까 ??

답변

2

가짜는 올바른 클래스이어야합니다. 시도 :

Net::HTTP.expects(:get_response).returns(Net::HTTPSuccess.allocate) 

그것을위한 완벽한로

+0

글쎄, 필자가 제안한대로 support/mocha.rb 파일을 변경했습니다. (: get_response) .returns (NET : HTTPSuccess.allocate) 끝 하지만이 기능을 실행하면 이제, 다음과 같은 오류가 표시되기 전에 는 mocha_setup에게 순 :: HTTP.expects을! 넷 :: HTTP.get_response (any_parameters)가 호출되지 않는 이유를 (모카 :: ExpectationError) – Autodidact

+0

없음 아이디어 : - 정확히 한 번만 예상, 아직 호출 : 모든 기대는 만족의 기대를 만족시켰다. 항상 호출되는 것이 아니라면 expect (같은 작업, 트리거되지 않을 때 실패하지는 않음) 대신에'stubs'를 사용해야합니다. Fakeweb foo (@Radar 언급)와 같은 사운드는 훨씬 좋은 솔루션입니다. 저조한 수준에서의 조롱은 거의 항상 두통을 일으 킵니다. – cwninja

+0

감사합니다. 이제 코드 끝 부분에 .at_most (4)를 추가하여 해결했습니다. 하지만 여전히이 솔루션에 만족하지 않습니다. 나는 모카 (Mcha)에 뛰어 들기 전에 FakeWeb을 보았지만 모카 (Mocha)를 대체 할 코드 라인을 찾지 못했다. FakeWeb을 사용하여이 코드를 작성해 줄 수 있습니까? – Autodidact

2

나는 이것에 대한 Fakeweb을 사용하는 것이 좋습니다 것 (Class#allocate 초기화 호출하지 않고 클래스를 인스턴스화).

+0

+1. 나는 이것이 내 대답을 위해 부름 받았던 것을 기억하려고 노력했다. – cwninja