Ruby on rails Rubymine是否支持rails中的“let”语法?
我正在使用Rubymine在Rails4、rspec和capybara创建一个项目。当我在Capybara特性中使用let语法定义变量时,RubyMine似乎无法检测到变量的存在。例如,在下面的代码中,在场景部分的intelliJ中无法识别变量capsuleHash、capsuleForm和capsuleViewPage。有人有解决办法吗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)
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缓存无效以确认。有什么建议吗?