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

Ruby on rails Rubymine是否支持rails中的“let”语法?,ruby-on-rails,rspec,intellij-idea,capybara,rubymine,Ruby On Rails,Rspec,Intellij Idea,Capybara,Rubymine,我正在使用Rubymine在Rails4、rspec和capybara创建一个项目。当我在Capybara特性中使用let语法定义变量时,RubyMine似乎无法检测到变量的存在。例如,在下面的代码中,在场景部分的intelliJ中无法识别变量capsuleHash、capsuleForm和capsuleViewPage。有人有解决办法吗 require 'spec_helper' feature 'Capsules Feature' do let(:capsuleHash)

我正在使用Rubymine在Rails4、rspec和capybara创建一个项目。当我在Capybara特性中使用let语法定义变量时,RubyMine似乎无法检测到变量的存在。例如,在下面的代码中,在场景部分的intelliJ中无法识别变量capsuleHash、capsuleForm和capsuleViewPage。有人有解决办法吗

  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

我不熟悉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

RubyMine确实支持let块,但您需要确保使用最新版本6.0.2。请参见

您能否分享您得到的具体错误和任何相关的堆栈跟踪?没有堆栈跟踪。当我在rspec中运行该功能时,它工作正常。问题是,因为RubyMine没有检测到这些变量的存在,所以我没有用点自动完成功能,它在下面放了一条扭曲的线,我觉得这很烦人。我也遇到了同样的问题,这很烦人。你找到解决方法了吗?我确实根据你的建议将我的RubyMine从6.0.1升级到了6.0.2,但是对于let中定义的变量,仍然会出现错误“Unresolved Ruby Reference”。您的链接似乎表明它在6.0.2中已被修复,但对我来说仍然是一样的。我在Mac上运行,我确实使RubyMine缓存无效以确认。有什么建议吗?