2014-01-10 2 views
0

Rubymine을 사용하여 Rails4, rspec 및 capybara에서 프로젝트를 만듭니다. Capybara 기능에서 변수를 정의 할 때 let 구문을 사용하면 RubyMine이 변수 존재를 감지 할 수없는 것 같습니다. 예를 들어 아래의 코드에서 변수 capsuleHash, capsuleFormcapsuleViewPage은 모두 시나리오 섹션의 intelliJ에서 인식되지 않습니다. 누구나 해결 방법이 있습니까?Rubymine은 레일즈에서 "let"구문을 지원합니까?

require 'spec_helper' 

    feature 'Capsules Feature' do 

    let(:capsuleHash) {attributes_for(:tdd_capsule)} 
    let(:capsuleForm) {CapsuleCreateForm.new} 
    let(:capsuleViewPage) {CapsuleViewPage.new} 

    scenario 'Add a new capsule and displays the capsule in view mode' do 

    visit '/capsules/new' 

    expect{ 
    capsuleForm.submit_form(capsuleHash) 
    }.to change(Capsule,:count).by(1) 

    capsuleViewPage.validate_on_page 
    expect(page).to have_content capsuleHash[:title] 
    expect(page).to have_content capsuleHash[:description] 
    expect(page).to have_content capsuleHash[:study_text] 
    expect(page).to have_content capsuleHash[:assignment_instructions] 
    expect(page).to have_content capsuleHash[:guidelines_for_evaluators] 
    expect(page).to have_link 'Edit' 

    end 

end 
+0

특정 오류 및 관련 스택 트레이스를 공유 할 수 있습니까? –

+0

스택 추적 Peter가 없습니다. rspec에서 기능을 실행할 때 잘 작동합니다. 문제는 RubyMine이 이러한 변수의 존재를 감지하지 못하기 때문에 점들이있는 자동 완성 기능을 얻지 못하고 밑바닥에 구불 구불 한 선이 생겨서 짜증이납니다. – Gurpreet

답변

0

저는 Ruby 용 IDE가 아닌 RubyMine에 익숙하지 않습니다. 당신이 질문을 표현한 방식으로, 나는 당신이 프로그램의 특정 지점에서 정의 된 "변수"를 표시하는 RubyMine의 일부 기능을 언급하고 있다고 가정합니다.

이 경우 let으로 전달한 기호가 이 변수로 정의되어 있지 않기 때문에 변수에 '표시'되지 않습니다. 그들은 관련된 블록의 값을 반환하는 메서드로 정의됩니다. 각 it 블록 내에서 첫 번째 호출에서 블록 값이 기억되고 그 값은 동일한 블록 내의 후속 호출에서 반환됩니다.

이러한 메소드를 정의 할 때 RSpec 코드에 아무런 문제가 없음에 유의하십시오.

class Page 
    def has_content?(content) true ; end 
    def has_link?(link) true ; end 
end 

page = Page.new 

class CapsuleCreateForm 
    def submit_form(hash) 
    Capsule.increment_count 
    end 
end 

class CapsuleViewPage 
    def validate_on_page 
    end 
end 

def attributes_for(symbol) 
    {} 
end 

def visit(path) 
end 

class Capsule 
    @@count = 0 

    def self.count 
    @@count 
    end 

    def self.increment_count 
    @@count += 1 
    end 

end 

describe 'Capsules Feature' do 

    let(:capsuleHash) {attributes_for(:tdd_capsule)} 
    let(:capsuleForm) {CapsuleCreateForm.new} 
    let(:capsuleViewPage) {CapsuleViewPage.new} 

    it 'Add a new capsule and displays the capsule in view mode' do 

    visit '/capsules/new' 

    puts method(:capsuleHash) 

    expect{ 
    capsuleForm.submit_form(capsuleHash) 
    }.to change(Capsule,:count).by(1) 

    capsuleViewPage.validate_on_page 
    expect(page).to have_content capsuleHash[:title] 
    expect(page).to have_content capsuleHash[:description] 
    expect(page).to have_content capsuleHash[:study_text] 
    expect(page).to have_content capsuleHash[:assignment_instructions] 
    expect(page).to have_content capsuleHash[:guidelines_for_evaluators] 
    expect(page).to have_link 'Edit' 

    end 

end 
0

RubyMine 지원을 let 블록을하지 않습니다,하지만 당신은 6.0.2 최신 버전을 사용하십시오해야합니다 : 다음 코드는 예를 들어, 전달합니다. http://youtrack.jetbrains.com/issue/RUBY-14673

+0

내 RubyMine을 6.0.1에서 6.0.2로 업그레이드했는데 let '에 정의 된 변수에'Unresolved Ruby Reference '오류가 계속 나타납니다. 귀하의 링크는 6.0.2에서 수정되었음을 나타내지 만 나에게는 여전히 동일합니다. Mac에서 실행 중이며 RubyMine 캐시를 무효화하여 확인합니다. 어떤 팁? – Gurpreet

관련 문제