0

createコントローラーのメソッドのテストで問題が発生しました。私のテスト:

describe "POST #create" do
  it "creates a new admin_user" do
    expect{
      post :create, :admin_user => FactoryGirl.attributes_for(:admin_user)
    }.to change(Admin::User,:count).by(1)
  end
end

そして、私が得ている失敗した仕様:

1) Admin::UsersController logged in POST #create creates a new admin_user
     Failure/Error: expect{
       count should have been changed by 1, but was changed by 0
     # ./spec/controllers/admin_users_controller_spec.rb:75:in `block (4 levels) in <top (required)>'

これが私のコントローラーです:

  def create
    @admin_user = Admin::User.new(params[:admin_user])
    if @admin_user.save
      render nothing: true
    end
  end

そして工場:

require "factory_girl"
require 'ffaker'

FactoryGirl.define do
  factory :admin_user, class: "Admin::User" do |f|
    f.name {Faker::Name.first_name}
    f.email {Faker::Internet.email}
    f.password "aaa"
  end
end

と私のモデル:

class Admin::User < ActiveRecord::Base
  has_secure_password
  validates :email, :uniqueness => true, :presence => true 
  validates_presence_of :password, :on => :create
end

何が間違っているのかわかりません。インターネット全体を検索しましたが、答えが見つかりませんでした。Rails コンソールからのユーザーの追加は問題なく機能します。どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

この行:

post :create, FactoryGirl.attributes_for(:admin_user)

これでなければなりません:

post :create, :admin_user => FactoryGirl.attributes_for(:admin_user)

演習として、コントローラーの create アクションでパラメーター (p paramsまたはputs params.inspect) を出力すると、違いがわかります。

編集2つのことを試してください:

  1. パラメータを出力して、意味があるかどうかを確認してください。
  2. 問題は、パラメータが有効でないことかもしれません。を使用する代わりに、検証のいずれかが間違っている場合にエラーをスローする which をsave使用してみてください。テスト出力にエラーが表示されます。save!とにかく保存が失敗した場合は、状況を処理する必要があります。
于 2012-06-29T18:18:49.817 に答える