2017-10-06 9 views
0

以下のメソッドのテストケースを記述したいと思います。私はユニットテストの初心者です。下記のメソッドのテストケースを記述する正しい方法を教えてください。このメソッドのrspecを使ってテストケースを書く方法

def create_new_user 
    self.password_salt = BCrypt::Engine.generate_salt 
    self.password_hash = BCrypt::Engine.hash_secret(self.password, password_salt) 
    user = User.new(email: self.email, username:self.username, password_hash: password_hash, password_salt: password_salt) 
    if user.valid? 
     user.save ? {is_created: true, err:''} : {is_created: false, err:'Something went wrong,please try later...'} 
    else 
     {is_created: false, err: 'Please enter all mandetory fields..'} 
    end 
    end 
+0

ここで問題は何ですか?あなたはrspec構文に慣れていませんか?一般的なユニットテストですか? –

+0

@SergioTulentsev私はrspecを初めて使う人です。それはrspecだけで2〜3日間です。私はそれが有効なユーザーの場合 "(ユーザー)を保存する"のような構文を探しています。 「BCrypt :: Engine.generate_salt」のテスト方法について説明します。私は、BCryptがどのようにして塩を生成してからハッシュを生成するのかを言うことを意味します。 –

+0

なぜあなたはBCryptメソッドをテストする必要があると思いますか?このlibは、開発者によって大きくテストされています。努力を複製する必要はありません。ただし、正しいメソッドが呼び出されているかどうかを確認することができます。 'expect(BCrypt :: Engine).to receive(:generate_salt).and_call_original'などです。 –

答えて

2

これは「答え」自体が、正しい方向にポイントにあなたを助けるかもしれないいくつかのコメント/アドバイスではないかもしれない:あなたの方法は、それはだにもかかわらず、ハッシュを返すことになりそうだ

  1. 新しいユーザーを作成します。あなたはおそらく新しいユーザーを返すべきです。エラーがある場合、activerecordオブジェクトにはこれらのエラーがあり、エラーを追加する必要はありません。

  2. 動作をテストすることを忘れないでください。これはポイント1の変更にとって重要です。このメソッドの動作は次のとおりです。保存されているかどうかにかかわらず、ユーザーレコードを返します。これが動作です。それをテストしてください。

  3. おそらくuser.valid?を呼び出す必要はありません。ちょうどuser.saveを呼び出す

  4. おそらくuser.saveを返すことができます。なぜなら、うまくいけば永続化/保存されているユーザーが得られるからです。うまくいかない場合は、user.errorsを確認してください。

+0

@ashish guptaこれが役に立ったら、これを答えにすることができますか? – apanzerj

関連する問題