2012-03-31 12 views

答えて

4

オブジェクトを保存するとき、Railsはクラスのインスタンスにvalid?を呼び出します。しかし、クラスそのものにvalid?をスタブしました。それは動作しません。

あなたがここでしたいのは、のスタブsaveインスタンス、保存中のユーザーのなどです。 、再び

User.stub(:new) { mock_model(User, :save => false) }

@user = User.new#:

User.stub(:new) { mock_model(User, :save => true) }

@user = User.new#1 @userは現在

@user.save#モックオブジェクトは、他の例えばtrue

を返すモックオブジェクトであります@userはモック

@user.save#モックオブジェクトは、インスタンス先端のためのfalse

+0

OMGのおかげを返します!それが問題でした。私は、 'valid? 'のような低レベルのメソッドをスタブするほうが良いと思います。このようにして、機能とテストを破ることなく 'save'から' build'& 'create'にアクションをリファクタリングすることができます。これは当然のことではありません。今私はユーザーの 'User.any_instance.stub(:valid?)and_return(true)'のすべてのインスタンスにスタブを付けて解決しました。しかし、インスタンスとクラスのあなたのヒントは、私が一般的に見逃したものです。 – paulus

+0

「保存」の代わりに「有効」をスタブする限り、私は正反対の主張をしたいと思います:)リファクタリングについてのあなたの意見は良いものですが、ActiveRecordがリファクタリングされた場合はどうなりますか?後で 'save'が' valid? 'を呼び出さなくなりましたか?今では、あなたがコントロールしていないライブラリの内部実装のためにテストが中断します。 – zetetic

+0

Dev/Testでテストする前に、ProductionでActiveRecordを切り替えることはほとんどありませんか? :)開発/テストでは、テストがこの時点から失敗するため、明らかになります。だから、私たちはいつでもチェンジログや何か理由を見つけ出すことに関連することができます。私の見解では、アプリケーションクラスはコアクラスよりリファクタリングされる可能性が高いです。 – paulus