2016-07-13 13 views
0

列挙ステータスフィールドに誤った値を与える:FactoryGirlは、私がClient.rbモデルのFactoryGirl工場を建設しようとしています

Client.rb

enum status: [ :unregistered, :registered ] 

has_many :quotation_requests 

    #Validations 

    validates :first_name, 
      presence: true, 
      length: {minimum: 2} 

    validates :last_name, 
      presence: true, 
      length: {minimum: 2} 

    validates :email, email: true 

    validates :status, presence: true 

を工場出荷時:

FactoryGirl.define do 
    factory :client do 
    first_name "Peter" 
    last_name "Johnson" 
    sequence(:email) { |n| "peterjohnson#{n}@example.com" } 
    password "somepassword" 
    status "unregistered" 
    end 
end 

client_spec .rb

require 'rails_helper' 

    RSpec.describe Client, type: :model do 

     describe 'factory' do 

      it "has a valid factory" do 
      expect(FactoryGirl.build(:client).to be_valid 
      end 

     end 
end 

次のエラーが表示されます。

1) Client factory has a valid factory 
    Failure/Error: expect(FactoryGirl.build(:client, status: 'unregistered')).to be_valid 
     expected #<Client id: nil, email: "[email protected]", encrypted_password: "$2a$04$urndfdXNfKVqYB5t3kERZ.c.DUitIVXEZ6f19FNYZ2C...", first_name: "Peter", last_name: "Johnson", status: "0", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil> to be valid, but got errors: Status can't be blank 

エラーはステータスを空白にすることはできません。

工場がステータス属性に値を明確に割り当てているので、これがどのように可能であるかわかりません。

このファクトリで有効なクライアントオブジェクトを構築するにはどうすればよいですか?

はfactory_girl 4.7.0 使用factory_girl_railsを使用して4.2 をRailsの4.7.0

答えて

1

このエラーは、ステータス属性に使用したデータタイプが原因です。私は整数の代わりに文字列を選んだ。

新しい移行を実行して、ステータスのデータ型を整数に変更することで問題を解決しました。

class ChangeColumnTypeClientStatus < ActiveRecord::Migration 
    def change 
    change_column :clients, :status, :integer, default: 0 
    end 
end 

これで完全に動作します。

0

私はあなたが作成Where'reあなたclient_spec.rb

let(:client) { FactoryGirl.create(:client) } 

を忘れてしまったと思いますクライアントオブジェクト?

その他の問題は、あなたが工場に割り当てることかもしれ

:記号またはのためには、多分あなた列挙型であるよう未登録

status "unregistered" 

の代わり:

状況行う必要があります

ステータス0#:未登録

+0

let(:client)を使用するようにコードを変更しましたが、何も変更されませんでした。私はクライアントを作成していませんが、工場が有効なクライアントを構築することをテストするビルドです。そうすれば、他のテストのために工場を正確に使うことができます。私はステータスを試しました:未登録とステータス0#:未登録です。割り当て済みのステータスが表示されても、「ステータスは空白にできません」というエラーメッセージが表示されます。 – chell

関連する問題