0

私はShouldaを使うのが初めてで、どこから始めればよいのかわかりません。

テストできるようにしたいことの1つは、特定のモデルの新しいレコードを作成するときに、コントローラーが関連する別のモデルの新しいレコードを作成することになっていることです。

これをShouldaで作成するにはどうすればよいですか?

電子メールの新しいレコードを作成すると、次のようになります。

  def create
 29     @campaign = Campaign.find(params[:campaign_id])
 30     @email = @campaign.emails.build(params[:email])
 31     if @email.save
 32       @email.new_todos # create todos across all contacts for this asset
 33       flash[:notice] = "Successfully created email."
 34       #redirect_to campaign_url(@campaign)
 35       redirect_to :back
 36     else
 37       render :action => 'new'
 38     end
 39   end

'@ email.new_todos "は、モデルTodoの新しいレコードを作成します。これは、Eメールなどのすべてのモデルに追加された拡張機能です。

  def create
 29     @campaign = Campaign.find(params[:campaign_id])
 30     @email = @campaign.emails.build(params[:email])
 31     if @email.save
 32       @email.new_todos # create todos across all contacts for this asset
 33       flash[:notice] = "Successfully created email."
 34       #redirect_to campaign_url(@campaign)
 35       redirect_to :back
 36     else
 37       render :action => 'new'
 38     end
 39   end

私はゆっくりとテストを取り入れ始めたいと思います。そして、それを行う方法を学ぶために故障する可能性が高いと思われる主要なタイプの行動を選んでいます。

ありがとう。

4

1 に答える 1

1

この例は単体テストに適しています。コントローラーでアクションをトリガーしていますが、ロジックはモデルにあります。

Shoulda は に便利な機能を追加しますTest::Unit。コンテキストやマッチャーなど。

私はこれを次のようにテストします:

コンテキスト '.new_todos' は
  セットアップする
    @campaign = Campaign.create(:name => '私のキャンペーン')
    @email = @campaign.emails.build(:subject => 'テスト キャンペーン メール')
    @email.save
    @email.new_todos
  終わり

  「すべての連絡先の todo を生成」する必要があります。
    アサート @email.todos.count > 0
  終わり
終わり

明らかに、サンプルの属性を変更する必要があり、目的の結果が得られることを確認する必要があります (推測して使用@email.todosした ) が、それは始まりです。試してみて、何が起こるかを確認できれば、喜んで更新します。

コントローラーでこれをテストするには、機能テストまたは統合テストが必要です。機能テストもshouldaでかなり簡単です。それは次のようになります。

context 'POST to :create' do
  セットアップする
    @campaign = Campaign.create(:name => '私のキャンペーン')
    @email = 'test@test.com' # または期待するデータ
    投稿 :create, :campaign_id => @campaign.id, :email => @email
  終わり

  Respond_with(:redirect) する必要があります
  redirect_to('/some/path') を指定する必要があります
終わり

それが始まりです。幸運を!

于 2010-12-23T19:41:19.517 に答える