0

私には関係があります: Transaction belongs_to Post(has_many)

そして、私はこの見解を持っています:

# /app/views/transactions/index.html.haml

%h3 Transactions
%table
  %tr 
    %th Item
    %th Description
    %th Money
  - @transactions.each do |transaction|
    %tr 
      %td= transaction.description
      %td= number_to_currency(transaction.money)
      %td= link_to transaction.post.title, transaction.post.link # (!)

最後の行がない場合は、次のようにテストします。

before(:each) do
  assign(:transactions, [
    stub_model(Transaction,
      { description: "Posted", money: 9.99 }
    ),
    stub_model(Transaction,
      { description: "Posted", money: 9.99 }
    )
  ])
end

it "renders a list of transactions" do
  render
  assert_select "tr>th", :text => "Description"
  assert_select "tr>th", :text => "Money"
  assert_select "tr>td", :text => "Posted", :count => 2
  assert_select "tr>td", :text => number_to_currency(9.99).to_s, :count => 2
end

しかし、それが属する投稿の情報を表示するビューの最後の行をテストする方法がわかりません。

について読んだstub_chainことがありますが、そこにモデル全体をスタブ化する方法がわかりません。
最初に Post をスタブ化し、次にスタブ化されたトランザクションに post_id を割り当てようとしましたが、どちらも機能しませんでした..

または、カピバラレベルでテストする必要がありますか?

4

1 に答える 1

0

方法を見つけました。

ちょうどした:

before(:each) do
  assign(:transactions, [
    stub_model(Transaction,
      { description: "Posted", money: 9.99, post: mock_model(Post, FactoryGirl.attributes_for(:post)) }
    ),
    stub_model(Transaction,
      { description: "Posted", money: 9.99, post: mock_model(Post, FactoryGirl.attributes_for(:post)) }
    )
  ])
end
于 2013-10-18T15:34:58.567 に答える