2014-01-10 85 views
0

我正在使用Rubymine在Rails4,rspec和capybara中創建一個項目。當我使用let語法來定義Capybara功能中的變量時,RubyMine似乎無法檢測到變量的存在。例如,在下面的代碼中,變量capsuleHashcapsuleFormcapsuleViewPage都未在情景部分中的intelliJ中被識別。有沒有人有解決方法?Rubymine是否支持rails的「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

彼得沒有堆棧跟蹤。當我在rspec中運行該功能時,它工作正常。問題是,因爲RubyMine沒有檢測到這些變量的存在,所以我沒有使用點的自動完成功能,並且在下面放置了一條扭曲的線條,這讓我覺得很煩。 – Gurpreet

回答

0

我不熟悉RubyMine,除了它是Ruby的IDE之外。不過,你說的是你的問題,我假設你指的是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,但錯誤「未解析的Ruby Reference」仍然顯示在let中定義的變量。你的鏈接看起來似乎表明它已被固定在6.0.2中,但對我來說它仍然是一樣的。我在Mac上運行,並且我確實無效了RubyMine Cache。有小費嗎? – Gurpreet