2014-12-23 3 views
1

rspec 3.0의 새로운 허용 구문 (그루터기 용)을 사용하려고 할 때 정말로 내 코드를보고 나에게 맞는지).rspec 3.0 스텁 구문 - 확실하지 않은 경우

download.rb

class Download 
    def download_file 
    # code to download a file 
    end 

    def valid_json 
    # code to verify downloaded file is file type json 
    end 
end 

download_spec.rb

require 'spec_helper' 
require 'json_spec' 

describe Download do 
    let(:download) {Download.new} 

    describe "#download_file" do 
    it 'downloads a file from remote file location ' do 
     allow(download).to receive(:exist).and_return(true) 
     download.download_file 
     expect(download).to have_received(:exist).and_return(true)  
    end 
    end 

    describe "#valid_json" do 
    it 'confirms downloaded file is JSON' do 
     # download.to_json.should have_json_path("id") 
     # download.to_json.should have_json_type(Integer).at_path("id") 
     expect(download.to_json).to have_json_path("id") 
     expect(download.to_json).to have_json_type(Integer).at_path("id") 
    end 
    end 
end 
사전에

많은 감사합니다!

답변

0

RSpec 3.0에서 스텁에 대한 올바른 구문을 사용하고 있다고 생각하지만,이 경우에 사용하려는 동기가 의심 스럽습니다. Ruby 테스트에 대한 Sandi Metz의 프레젠테이션을 확인해보십시오.이 테스트는 실제로 스텁을 사용하는 적절한 경우를 명확히하는 데 도움이됩니다. 여기 Sandid의 Magic Tricks of Testing 슬라이드 데크가 있습니다.

테스트의 이름에 따라 테스트해야하는 것은 파일 객체가이 메서드의 결과로 만들어 졌는지 여부입니다. 이것이 #download_file 메시지를 download 개체에 보내는 직접적인 부수적 인 효과입니다. 그 이상이면 구현을 테스트하고 인터페이스는이 아닌 테스트를 의미합니다.

describe Download do 
    let(:download) { Download.new } 

    describe "#file" do 
    context "before file has been downloaded" do 
     it "returns nil" do 
     expect(download.file).to be_nil 
     end 
    end 
    end 

    describe "#download_file" do 
    it 'downloads a file from remote file location ' do 
     # incoming command message to object under test 
     download.download_file 
     # assert direct public side effect 
     expect(download.file).to be_a File 
    end 
    end 
end 

편집 : 내가 얘기를 깜빡 했네요 것은 당신이 당신의 질문 여기에 이들은 단위 테스트 나 통합 테스트로 구성되어 여부에 당신의 검사 결과에 대해 개념 중 하나를 명확히해야 할 수도 있습니다. 그 대답을 바꿀 수 있습니다.

+1

안녕하세요 dnunez24, 재미있을 것입니다. 단지 Sandi Metz의 프리젠 테이션에 대해 이야기해야합니다. 저는 오늘 아침 YouTube에서이 주제에 대해 이야기했습니다. 아마 내 코드로는 충분치 않겠지 만, 다운로드 방법에 대한 테스트는 실제로 다운로드 구현의 결과로 생성 된 파일의 존재 여부를 테스트하기로되어있었습니다. 나는 다시 가서 Sandi의 갑판을 다시 볼 것이다. 당신의 도움을 주셔서 감사합니다! – user4219550

+0

좋습니다. 따라서 실제로 코드를 가져오고 파일을 생성하는 코드는 무엇이든지간에 실제로 그루터기로 처리해야 할 수도 있습니다. 특히 테스트를 실행하는 데 시간이 오래 걸리는 경우가 있습니다. 코드에 포함 된 다른 종속성을 이해하지 않고도 좋은 예제를 제공하는 것이 어려웠습니다. 의존성 삽입을 살펴보고 메소드 호출에 스텁을 훨씬 쉽게 보낼 수 있습니다. 나는 Sandi가 그것의 몇 가지 예를 제시한다고 생각한다. –

+0

예 단위 테스트입니다. – user4219550

관련 문제