Rubymine是否支持rails中的“let”语法?

时间:2014-01-10 05:16:47

标签: ruby-on-rails rspec intellij-idea capybara rubymine

我正在使用Rubymine在Rails4,rspec和capybara中创建一个项目。当我使用let语法在Capybara特性中定义变量时,似乎RubyMine无法检测变量的存在。例如,在下面的代码中,变量capsuleHashcapsuleFormcapsuleViewPage都未在方案部分的intelliJ中被识别。有没有人有解决方法?

  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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

RubyMine支持let块,但您需要确保使用最新版本6.0.2。见http://youtrack.jetbrains.com/issue/RUBY-14673