2017-03-09 8 views
1

アプリケーションが拒否された場合、denied_applicationsは1つ増加し、applicationsは-1になり、membersはまったく変更されません。これは良い書面によるテストですか、それとも醜いのですか?

# team.rb 
    has_many :memberships, dependent: :destroy 
    has_many :members, -> { where(team_memberships: {state: :confirmed}) }, through: :memberships, source: :user 
    has_many :ex_members, -> { where(team_memberships: {state: :left}) }, through: :memberships, source: :user 
    has_many :applications, -> { where(state: :pending) }, class_name: "Membership" 
    has_many :denied_applications, -> { where(state: :denied) }, class_name: "Membership" 

ので、私の質問は、より可能性が高い:は、これは良いで書かテストであるか、あなただけの一部の人々は私見差アサーションが異なるテストであるべきだと主張、しかしでしょう

team.denied_applications.reload.count.must_equal(1) 
team.applications.reload.count.must_equal(0) 
team.members.reload.count.must_equal(0) 

答えて

0

を記述しますその場合、問題はありません。 、私の心には最適ではありません何

は、あなたのテストが依存していないか、お互いに干渉することを確認するために

let(:team) { Team.last } 
let(:user) { User.last } 

を呼んでいるということです、データベースは、テスト実行の間にクリーニングする必要があり、そうこれが行われている場合、あなたは次のように記述します:

let(:team) { Team.create } 
let(:user) { User.create } 

かあなたには、いくつかの検証が起こっていて、有効なを入力したくない場合は、例えば、より簡単にレコードを作成するためにfactory_girlのようなものを使用することができますデータはどこにでもあります。

+0

私はfactory_girlを使用します。「Team.last」はseeds.rbからのものです。プロジェクト全体が大きく、テストのための種が必要です。ユーザーがチームを作成します。チームはさまざまなプロジェクトを作成し、そのチームの一部のユーザーはプロジェクトで何かを行うことができます。私は、工場員といっしょにこれらのことをするのは実用的ではないと感じています。チームはまず承認を必要とし、プロジェクトの承認が必要です。 1つのテスト小さなテストを実行するには、テストシナリオを持つために少なくとも20行のルビコードを実行する必要があります。 –

+0

私はあなたがどこから来ているのか確かに見ています。おそらく、 'factory_girl'特性があなたにそれを手伝ってくれるかもしれないので、何らかの' create(:team、:approved) 'のようなものがあるかもしれませんか? – jfornoff

関連する問題