2014-02-19 7 views
0

레일을 Rails Tutorial으로 배우고 있습니다. 저자는 RSpec의 선택적 비트를 능동적으로 가르칩니다. 각 장 이후의 연습에서는 피스 티어 코드를 작성하는 법을 배울 수 있습니다. 나는 그 운동을하기로 결심했다. 하지만 문제는 다음 장에서 독자를 그렇지 않은 사람처럼 취급한다는 것입니다. 그래서 작성한 pithier 코드는 그가 작성한 새로운 'unpithy'코드를 어떻게 적용해야할지 모를 때 도전 과제가됩니다. 그것은 "더러운"대응입니다. 골수 버전에서Ruby on Rails RSPEC

는 파일의 시작 부분은 덜 반복라는 것으로,와 같은 같습니다

require 'spec_helper' 

    describe User do 

    before { @user = User.new(name: "Example User", email: "[email protected]", 
           password: "foobar", password_confirmation: "foobar") } 

    subject { @user } 

    it { should respond_to(:name) } 
    it { should respond_to(:email) } 
    it { should respond_to(:password_digest) } 
    it { should respond_to(:password) } 
    it { should respond_to(:password_confirmation)} 

    it { should be_valid } 
    . 
    . 
    . 
end 

그래서, 다음 테스트 결과가 이렇게 같이 : 시도 할 때

describe "when email is not present" do 
    before { @user.email = " " } 
    it { should_not be_valid } 
    end 

@user.password@user.password_confirmation이 있는지 여부를 테스트하려면이 RSpec 형식을 계속 사용하고 싶습니다.

저자 버전은 같은 같습니다

describe "when email is not present" do 
    before do 
    @user= User.new(name: "Example User", email: "[email protected]", 
        password: " ", password_confirmation = " ") 
    end 
    it { should_not be_valid } 
end 
(저자가 pithier RSpec에 코드의 행사없이 일을하는 방법으로 되돌아갑니다 때문에)

그것에 나의 시도는 다음과 같은 것이다 :

describe "when password is not present" do 
    before { @user.password = " ", @user.password_confirmation = " " } 
    it { should_not be_valid } 
end 

이 문맥에서 before를 사용하여 여러 해시 값을 수정하는 적절한 방법입니까?

또한 RSpec 관련 질문에 대한 답을 찾는 데 어려움을 겪고 있습니다. 누구든지 이러한 종류의 답을 찾는 데 필요한 확실한 루틴을 가지고 있습니까? 여러 라인을 차지 블록이있는 경우

답변

1

일반적으로, 당신은 do...end 대신 { }를 사용하는 것이 그래서 당신의 코드는 같을 것이다 :

describe "when password is not present" do 
    before do 
    @user.password = " " 
    @user.password_confirmation = " " 
    end 
    it { should_not be_valid } 
end 

이 RSpec에 관련된 질문에 대한 답을 찾을 때, 나는 보통 먼저 Google로 넘어가십시오. 그러나 rSpec과 Capybara를 사용하는 경우 CapiBara 문서를 확인하십시오. rSpec 문서가 도움이되지 않았기 때문에 검색 범위를 좁히는 것이 좋습니다. 다음으로 나는 (당신이 그랬던 것처럼) 여기서 보게 될 것입니다, 그래서 나는 당신이 올바른 길에 있다고 생각합니다.

+0

대단히 감사합니다. 도움이되었습니다. 나는 카피 바라 (Capybara)를 사용하고 있으므로, 나는 그들의 문서를 살펴볼 것이다. 또한,'{}'를 사용하여 단일 라인 블록을 감싸 주어야합니까, 아니면 그만 둘 수 있습니까? – EnergyWasRaw

0

작성자 버전에서 before 블록은 각 it 설명을 입력하기위한 인스턴스 변수 @user을 생성합니다. 여러 해시 값을 생성하는 메소드의 매개 변수는 다음과 같습니다. def some_method(args, hash_options = {}) 메서드에 해시 매개 변수를 넣는 루비 스타일입니다. Rspec before 블록에 넣으십시오. before 블록은 it 블록을 입력하기 전에 필요한 실행을 인스턴스화하는 데 사용됩니다. 따라서 귀하의 경우, 복수의 해시 값을 before 블록에 넣지 말고 대신 해쉬 매개 변수로 인스턴스화하는 일부 개체를 준비하여 it 블록에서 개체를 실행할 수 있습니다.

은 내가 RSpec에 대한 개요가 그것을 읽을 제안 : RSpec에에서

매일 레일 테스트를 https://leanpub.com/everydayrailsrspec


온라인 자원 :

더 나은 사양,
http://betterspecs.org/

관련 문제