2013-09-08 3 views
25

shoulda-matchers을 사용하고 RSpec에의 새로운 expect syntax에 대한 올바른 형식은 무엇입니까?RSpec에 예상 했어야은-정합 구문

+0

미안 내가 관련하여 했어야 – trev9065

+0

의미 투표 - 투 - 가까운 기반의 기반이되는 주로 의견에, I 올릴 때 ld는 "좋은 아이디어"인지 묻는이 특별한 경우는 관심사가 아닌 문제라는 사실에 근거한 설명이 있기 때문에 예외라고 주장한다. –

+0

은 그것을 적절하게 만들기 위해 quesrion 세부 사항을 편집했습니다. –

답변

55

다음과 같이 하나는 확실히 새로운 기대 구문으로 했어야-매처 (matcher)를 사용할 수 있지만 :

it 'should validate presence of :email' do 
    expect(subject).to validate_presence_of :email 
end 

또는 더 간결 미만 읽을 :이

it { expect(subject).to validate_presence_of :email } 

한 - 라이너 should 형식을 matcher는 일반적으로 config.syntax == :expect 일 때도 2.14에서 명시 적으로 지원됩니다. should이 같이 암시 적 주제와 함께 사용되는 경우 :

describe User 
    it { should validate_presence_of :email } 
end 

should 달리에 의존하는 Kernel의 원숭이 패치에 의존하지 않습니다.

이것은 https://github.com/rspec/rspec-expectations/blob/master/Should.md에 덮여있다. 사실,이 문서에서는 위의 shoulda 정규 표현식을 사용하여이 예외를 설명합니다.

Using implicit `subject` with `expect` in RSpec-2.11 또한 it 대신 사용할 수있는 구성 옵션에 대해 설명합니다.

expect_it { to validate_presence_of :email } 

업데이트 : RSpec에 3.0 (베타 2)로, 당신은 또한 사용할 수 있습니다 :

it { is_expected.to validate_presence_of :email } 
+0

첫번째 블록은'desribe User'에 둘러싸여있을 것입니다, 맞습니까? 그것이 3 개의 다른 선에 3 개의 선의 omparison와 같게 보이는 것에 따라. 그러나 그것은 아주 그것이 아니다. 그렇다면 첫 번째 코드 블록을 명확히하기 위해 추가 할 수 있습니다. –

+0

@MichaelDurrant 예, 그렇습니다. 동의했다. 이것을 지적 해 주셔서 감사합니다. 답변이 업데이트되었습니다. –

+0

누구든지 downvote가 무엇인지에 대해 알 수 있습니까? 이것이 "주로 의견을 바탕으로 한"것에 대한 가까운 득표와 관련이 있습니까? –

0

난 @ 피터 alfvin의 대답을 suplement에 대한 것입니다. 경우에 당신은 당신이 it 블록의 외부 :expect을 사용할 수 없습니다 모델과 shoulda-matchers과의 마이그레이션 자신을 테스트, 그렇게 쓸 수 없습니다 :

RSpec.describe ModelName, type: :model do 
    expect(subject).to belong_to(:user) 
end 

을 그리고 당신은 expection 얻을 것이다 :

`expect` is not available on an example group (e.g. a `describe` or `context` block). 

을 하지만 올바른 버전은 다음과 같습니다

RSpec.describe ModelName, type: :model do 
    it { expect(subject).to belong_to(:user) } 
end