0

だから私は次のテストを持っています:

it "should not update a user based on invalid info" do
    put :update, :id => @factory.id, :user => {
       :name => '', :user_name => '',
       :email => '', :email_confirmation => '',
       :password => '', :password_confirmation => 'dfgdfgdfg',
       :bio => '', :picture_url => ''
    }
end   

明らかに欠落しているデータがあります。

次に、次のコントローラーがあります。

  def update
    @user = User.friendly.find(params[:id])
    @user.update_attributes(user_update_params)
    if @user.save
      render :show
    else
      render :edit
    end
  end

これには、次のプライベート メソッドがあります。

  def user_update_params
    params.require(:user).permit(:name, :user_name, :email, :email_confirmation, :password,
      :password_confirmation, :bio, :picture_url)
  end  

このテストが実行されると合格です - それは私にActiveRecord::RecordInvalid

あなたが興味を持っているなら、これはモデルです:

class User < ActiveRecord::Base
  attr_accessor :password

  before_save :encrypt_password

  validates :name, uniqueness: true, presence: true
  validates :user_name, uniqueness: true, presence: true, length: {minimum: 5}
  validates :email, presence: true, confirmation: true, uniqueness: true, email_format: {message: "what is this? it's not an email"}
  validates :password, presence: true, confirmation: true, length: {minimum: 10}

  extend FriendlyId
  friendly_id :name, use: [:slugged, :history]

  def self.authenticate(user_name, password)
    user = User.find_by(user_name: user_name)
    if(user && user.password_hash == BCrypt::Engine.hash_secret(password, user.salt))
      user
    else
      nil
    end
  end

  def encrypt_password
    if password.present?
      self.salt = BCrypt::Engine.generate_salt
      self.password_hash = BCrypt::Engine.hash_secret(password, salt)
    end
  end
end

また、それは非常に些細なことだと思います

更新これが私の工場です。

FactoryGirl.define do
  factory :user, :class => 'User' do
    name "sample_user"
    email "MyString@gmail.com"
    user_name "MyString"
    password "someSimpleP{ass}"
  end
end

から@factory作成されます@factory = FactoryGirl.create(:user)

4

2 に答える 2

2

putメッセージをサーバーに送信できるように引数が適切に形成されている限り、エラーを発生させないRSpec メソッド ( ) を実行しています。引数自体に問題はなかったので、エラーは発生しませんでした。サーバーがリクエストを正常に完了できない場合は、レスポンスに反映されるため、個別にテストする必要があります。

もちろん、他の人が指摘しているように、RSpec の例では、例が成功するかどうかを決定する「期待値」をコードに設定するのが一般的です。

于 2013-09-05T05:33:22.163 に答える