测试设备在Rspec和FactoryGirl的注册

时间:2016-02-26 09:29:30

标签: ruby-on-rails rspec devise

路线

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)>'

我的问题是,导致失败的原因以及如果我的帖子请求成功创建用户,我该如何调试?我知道我可以使用水豚,但在这种情况下,我想确保如果我发布了注册请求,它会注册用户。

0 个答案:

没有答案
相关问题