未定义的局部变量或方法页面(RSpec)

时间:2014-08-15 17:22:33

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 rspec

some_spec.rb

require 'spec_helper'

describe "Authentication." do  
 subject { page }
 let(:user) { FactoryGirl.create(:user) }
 before {visit new_user_session_path}
 describe "Login with username" do
  before do
   fill_in "Login",   with: user.username
   fill_in "Password",    with: user.password
   click_button "Sign in"
  end
  expect(page).to have_content('Signed in successfully.')    
 end
describe "Login with email" do    
 before do
   fill_in "Login",   with: user.email
   fill_in "Password",    with: user.password
   click_button "Sign in"
 end
 expect(page).to have_content('Signed in successfully.')    
end
end

spec_helper.rb

# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rails'

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

# Checks for pending migrations before tests are run.
# If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.maintain_test_schema!

RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
  # ## Mock Framework
  #
  # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
  #
  # config.mock_with :mocha
  # config.mock_with :flexmock
  # config.mock_with :rr

  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  # If you're not using ActiveRecord, or you'd prefer not to run each of your
  # examples within a transaction, remove the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = true

  # If true, the base class of anonymous controllers will be inferred
  # automatically. This will be the default behavior in future versions of
  # rspec-rails.
  config.infer_base_class_for_anonymous_controllers = false

  # Run specs in random order to surface order dependencies. If you find an
  # order dependency and want to debug it, you can fix the order by providing
  # the seed, which is printed after each run.
  #     --seed 1234
  config.order = "random"
  config.include Capybara::DSL
  config.include Rails.application.routes.url_helpers
end

问题是什么?运行命令终端后返回错误:undefined local variable or method 'page'

以下问题对我没有帮助: rspec+capybara undefined local variable or method

1 个答案:

答案 0 :(得分:4)

我认为您应该从规范中删除subject { page }

pageCapybara中定义。

重要提示:it块来包装您的期望!