路线
devise_for :users, controllers: { registrations: 'users/registrations' }
模型
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
before_create :set_default_role
enum role_types: [:doctor, :patient]
def set_default_role
set_role :patient unless roles.include? User.role_types[:patient]
end
end
class Patient < User
end
class Doctor < User
end
FactoryGirl
require 'faker'
FactoryGirl.define do
factory :user do
sequence(:name) { |n| "full_name_#{n}" }
address 'valid address'
phone '1234567890'
password 'password'
sequence(:email) { |n| "valid_email_#{n}@example.com" }
end
factory :doctor, class: Doctor, parent: :user do
roles [0, 1]
field
end
factory :patient, class: Patient, parent: :user do
roles [1]
end
end
注册规范
require 'spec_helper'
describe Users::RegistrationsController, type: :controller do
before do
@request.env['devise.mapping'] = Devise.mappings[:user]
end
context 'register a patient' do
let(:add_patient) { post :create, patient: FactoryGirl.attributes_for(:patient) }
it { expect { add_patient }.to change(Patient, :count).by(1) }
end
context 'register a doctor' do
let(:add_doctor) { post :create, doctor: FactoryGirl.attributes_for(:doctor) }
it { expect { add_doctor }.to change(Doctor, :count).by(1) }
end
end
当我运行规范时,我继续为这两个示例失败
1) Users::RegistrationsController register a patient should change #count by 1
Failure/Error: it { expect { add_patient }.to change(Patient, :count).by(1) }
expected #count to have changed by 1, but was changed by 0
# ./spec/controllers/registrations_controller_spec.rb:19:in `block (3 levels) in <top (required)>'
我的问题是,导致失败的原因以及如果我的帖子请求成功创建用户,我该如何调试?我知道我可以使用水豚,但在这种情况下,我想确保如果我发布了注册请求,它会注册用户。