2014-01-10 4 views
0

Я использую Ruby для создания проекта в Rails4, rspec и capybara. Когда я использую синтаксис let для определения переменных в функциях Capybara, кажется, что RubyMine не может обнаружить существование переменных. Например, в этом коде ниже переменная capsuleHash, capsuleForm и capsuleViewPage все не распознаются в 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

Нет трассировки стека Питер. Он отлично работает, когда я запускаю функцию в rspec. Проблема в том, что, поскольку RubyMine не обнаруживает существование этих переменных, я не получаю функцию автозаполнения с точками, и она помещает подстрочную линию под ней, которую я нахожу раздражающей. – Gurpreet

ответ

0

Я не знаком с RubyMine, кроме IDE для Ruby. Однако, как вы сформулировали свой вопрос, я предполагаю, что вы имеете в виду какую-то особенность 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, но ошибка «Unresolved Ruby Reference» по-прежнему отображается для тех переменных, которые определены в let. Ваша ссылка, похоже, указывает на то, что она была исправлена ​​в 6.0.2, но для меня ее все равно то же самое. Я работаю на Mac, и я сделал недействительным RubyMine Cache для подтверждения. Какие-нибудь советы? – Gurpreet