Ruby on rails 4 Rails,Desive,Rspec:未定义的方法';登录&x27;
我尝试在Rails中编写Rspec测试,使用Desive助手方法进行登录和注销。“登录”方法不起作用。然而,在对应用程序进行大量更改之前,它就已经开始工作了 我尝试过的事情:Ruby on rails 4 Rails,Desive,Rspec:未定义的方法';登录&x27;,ruby-on-rails-4,rspec,devise,Ruby On Rails 4,Rspec,Devise,我尝试在Rails中编写Rspec测试,使用Desive助手方法进行登录和注销。“登录”方法不起作用。然而,在对应用程序进行大量更改之前,它就已经开始工作了 我尝试过的事情: 我正在Rspec.configure中包含测试助手 使用典狱长的登录名作为 正在清除Rails缓存 除掉水豚,看看这是否是问题的根源 我没有在控制器规范中明确设置会话(例如,没有有效的\u会话) 到目前为止,还没有骰子。使用已登录用户测试控制器需要做哪些不同的操作 错误消息: OrderItemsController
- 我正在Rspec.configure中包含测试助手
- 使用典狱长的登录名作为
- 正在清除Rails缓存
- 除掉水豚,看看这是否是问题的根源
- 我没有在控制器规范中明确设置会话(例如,没有有效的\u会话)
OrderItemsController GET #index renders the :index view
Failure/Error: sign_in :admin
NoMethodError:
undefined method `sign_in' for # <RSpec::ExampleGroups::OrderItemsController_2::GETIndex:0x00000102c002d0>
# ./spec/controllers/order_items_controller_spec.rb:6:in `block (2 levels) in <top (required)>'
spec_helper.rb
require 'rspec/rails'
require 'capybara/rspec'
RSpec.configure do |config|
config.include ApplicationHelper
config.include ControllersHelper
config.include UsersHelper
config.include Devise::TestHelpers, type: :controller
config.include FactoryGirl::Syntax::Methods
end
Gemfile
group :development, :test do
gem 'rspec-rails', '~> 3.0.0.beta'
gem 'capybara'
gem 'factory_girl_rails'
gem 'faker'
gem 'dotenv-rails'
gem 'guard'
gem 'guard-annotate'
gem 'guard-rspec', require: false
gem 'guard-livereload', require: false
gem 'foreman'
end
工厂/user.rb
FactoryGirl.define do
factory :user do
first { Faker::Name.first_name }
last { Faker::Name.last_name }
email { Faker::Internet.email }
admin false
password "secrets1"
password_confirmation "secrets1"
confirmed_at Date.today
factory :admin do
admin true
end
end
end
提前感谢。我可以为您提供一个示例(适用于我-rspec/capybara/simplecov等) spec/spec\u helper.rb
require 'capybara/rspec'
require 'capybara/rails'
RSpec.configure do |config|
config.use_transactional_fixtures = true
config.infer_base_class_for_anonymous_controllers = false
config.include FactoryGirl::Syntax::Methods
config.include Devise::TestHelpers, type: :controller
config.include Capybara::DSL
config.include Warden::Test::Helpers
config.include Rails.application.routes.url_helpers
end
require 'spec_helper'
feature 'Verify contract' do
# Create employee
let(:employee) { create(:employee) }
let (:book) { create(:book) }
# Sign in employee before each test!
before :each do
login_as employee, scope: :user
end
scenario 'create book' do
# Visit Index and click to create
visit employee_books_path
click_link 'Create'
expect(current_path).to eq(employee_books_path)
end
end
spec/integration/user\u flow\u spec.rb
require 'capybara/rspec'
require 'capybara/rails'
RSpec.configure do |config|
config.use_transactional_fixtures = true
config.infer_base_class_for_anonymous_controllers = false
config.include FactoryGirl::Syntax::Methods
config.include Devise::TestHelpers, type: :controller
config.include Capybara::DSL
config.include Warden::Test::Helpers
config.include Rails.application.routes.url_helpers
end
require 'spec_helper'
feature 'Verify contract' do
# Create employee
let(:employee) { create(:employee) }
let (:book) { create(:book) }
# Sign in employee before each test!
before :each do
login_as employee, scope: :user
end
scenario 'create book' do
# Visit Index and click to create
visit employee_books_path
click_link 'Create'
expect(current_path).to eq(employee_books_path)
end
end
我希望一切都会好起来:)我想你的问题是找不到狱长测试助手…我想出了一个解决办法。我将控制器的descripe块显式定义为控制器类型
describe OrderItemsController, :type => :controller do
我仍然不明白为什么这段代码以前可以工作,但现在需要这个(看似多余的)显式声明。不管怎样,我很想知道这里发生了什么。谢谢 您最近是否像我一样升级到RSpec 3?这是来自: 自动添加元数据 3.0.0之前的RSpec版本会根据 它们在文件系统上的位置。这既让新用户感到困惑,也让他们感到困惑 对于一些老用户来说是很理想的 在RSpec 3中,必须显式启用此行为:
# spec/rails_helper.rb
RSpec.configure do |config|
config.infer_spec_type_from_file_location!
end
由于这种假定行为在教程中非常普遍,因此默认
由rails生成的配置生成rspec:install启用此功能
如果遵循上面列出的规范目录结构,并且
已配置从文件位置推断规格类型!,RSpec将自动
包括每种类型的正确支持功能
添加该配置片段后,我不再需要指定规范类型(例如,
type::controller
)。您可以使用spec/spec\u helper.rb文件中的designe helper:
RSpec.configure do |config|
config.include Devise::TestHelpers, type: :controller
end
对于Rails 5和Rspec 3,您需要将其添加到spec_helper.rb中
require 'rspec/rails'
require 'capybara/rspec'
RSpec.configure do |config|
config.include ApplicationHelper
config.include ControllersHelper
config.include UsersHelper
config.include Devise::TestHelpers, type: :controller
config.include FactoryGirl::Syntax::Methods
end
config.include designe::Test::ControllerHelpers,type::controller
如果在请求规范文件中需要
登录
方法,则应包括以下内容:
config.include Devise::Test::IntegrationHelpers, type: :request
现在它说的是未定义的方法“get”和“post”,所以我不知道您的答案是否绕过了我的问题。再说一次,所有这些都在早些时候起了作用,这很奇怪。@steel,你在这里的评论帮助我意识到我确实和你在同一条船上,因此你的回答也对我起了作用。展示你的spec_助手帮助了我。它起作用了。谢谢。谢谢你的回答,帮助了我。我将从Rails 4升级到4.1。你呢?我会检查控制器测试指南,如果我发现了什么,我会在这里提到。仍然在Rails 4.0.3上。谢谢你看。我想我找到了。请看我的答案。