我正在使用Rubymine在Rails4,rspec和capybara中创建一个项目。当我使用let
语法在Capybara特性中定义变量时,似乎RubyMine无法检测变量的存在。例如,在下面的代码中,变量capsuleHash
,capsuleForm
和capsuleViewPage
都未在方案部分的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
答案 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