ruby-on-rails - 使用 role_model 和 Factory_Girl(用于规范测试),如何正确地将用户设置为管理员?

标签 ruby-on-rails ruby ruby-on-rails-3 testing rspec-rails

我正在 Rails 上运行一些功能规范,但出于某种原因我无法使用 role_model 正确设置管理员。

这是我的代码:

app/models/user.rb

   class User < ActiveRecord::Base
      include RoleModel

      attr_accessible :email, :username, :roles, :password, :password_confirmation

      has_secure_password
      validates :email, :username, :password, :password_confirmation, presence: true
      validates :email, :username, uniqueness: true

      roles :admin, :moderator, :developer
    end

app/controllers/sessions_controller.rb

class SessionsController < ApplicationController
...
    def create
        user = User.find_by_email(params[:email])
        if user && user.authenticate(params[:password])
            session[:user_id] = user.id
            if user.is? :admin
                redirect_to admin_url, notice: "Admin Logged In!"
            else 
                redirect_to user_url(user), notice: "Logged In!"
            end
        else
            flash.now.alert = "Email or password invalid!"
            render "new"
        end
    end

...
end

app/spec/factories/users.rb

require 'faker'
require 'role_model'

FactoryGirl.define do 
    factory :user do
        username { Faker::Internet.user_name }
        email { Faker::Internet.email }
        password "password"
        password_confirmation "password"

        factory :invalid_user do
            username nil
        end

        factory :admin do
            roles = [:admin]
        end
    end
end

app/spec/features/admin_spec.rb

require "spec_helper"

feature "Admin Dashboard" do
    scenario "accesses the dashboard" do
        admin = create(:admin)

        visit root_path
        fill_in "Email", with: admin.email
        fill_in "Password", with: admin.password
        click_button "Login"

        current_path.should eq admin_path
        within 'h1' do
            page.should have_content "Hello, world!"
        end

        page.should have_content @app_name
        page.should have_content "Games"
    end
end

出于某种原因,测试在管理员用户应登录的“current_path.should eq admin_path”处一直失败。谁能告诉我我的设置发生了什么?

最佳答案

原来我必须删除管理工厂中的“=”。

关于ruby-on-rails - 使用 role_model 和 Factory_Girl(用于规范测试),如何正确地将用户设置为管理员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17603085/

相关文章:

ruby-on-rails - FrozenError - 无法修改卡住字符串(ruby 2.5+)

ruby-on-rails - 当前页面?方法

javascript - 为部分渲染 javascript - Rails 3

ruby-on-rails - 设计sign_in方法参数数量错误(1代表0)

ruby-on-rails - Ruby on Rails n00b。 rake 分贝 :migrate fail

ruby-on-rails - 如何以 DRY 方式基于 current_page 将 'active' 类应用于我的导航? - rails 3

sql - 在 Ruby on Rails 中访问查询

ruby-on-rails - Ruby 1.9.3 哈希语法不适用于 rspec-rails 2.9?

ruby-on-rails - 使用 apache/passenger 设置多个 redmine 实例

ruby-on-rails - 为什么在Rails 3中,<%= note.html_safe%>和<%= h note.html_safe%>给出相同的结果?