【发布时间】:2018-04-18 08:01:36
【问题描述】:
我最近在我的 rails 项目中添加了 Devise 和 CanCanCan 用于身份验证和权限。
因此它破坏了我之前所做的大部分验收测试,例如:
resource 'Projects' do
route '/projects?{}', 'Projects collection' do
get 'Return all projects' do
example_request 'list all projects' do
expect(status).to eq 200
我知道为什么这段代码被破坏了:我没有@current_user,CanCan 用CanCan::AccessDenied 拒绝了请求。
我目前正在尝试对管理员用户进行身份验证,以便通过我的验收测试,因为我为管理员定义了 can :manage, :all。
我偶然发现了许多类似我的帖子,但没有任何解决方案有效,因为我找到的所有答案都是为控制器测试而设计的,而 sign_in 方法显然对他们有用。
到目前为止我尝试了什么:
before(:each) do
sign_in admin
end
NoMethodError:
undefined method `sign_in' for #<RSpec::ExampleGroups::Projects::ProjectsProjectsCollection::GETReturnAllProjects:0x0000000005dc9948>
所以我尝试添加
RSpec.configure do |config|
config.include Devise::TestHelpers
Failure/Error: @request.env['action_controller.instance'] = @controller
NoMethodError:
undefined method `env' for nil:NilClass
据我了解,我不能这样做,因为我没有在控制器范围内进行测试,但我正在测试资源,所以我没有@request 也没有@controller。
我做错了什么,如果没有,既然我包含了身份验证和权限,我该如何通过测试?
使用的版本:
cancancan (2.2.0)
devise (4.3.0)
rails (5.1.4)
ruby 2.5.0p0
rspec (3.7.0)
【问题讨论】:
-
您使用的是哪个版本的 rails 和 devise?
-
@Thrasher 我用版本更新了我的问题
-
你检查了吗? How To: Test with Capybara
-
我检查了两次,同样的问题:我没有用
sign_in admin设计,而是用 Warden 尝试了login_as admin, scope: :user。我得到了NoMethodError:undefined method []= for nil:NilClass,这是一个同样的问题 -
我也看了cancan official doc for testing,我已经测试了我的能力,现在我想测试我的资源,而不是控制器
标签: ruby-on-rails rspec devise cancan cancancan