0

我是新手,不知道从哪里开始。

我希望能够测试的一件事是,当我为给定模型创建新记录时,控制器应该为另一个相关模型创建新记录。

我怎么在应该做这个?

以下是我为电子邮件创建新记录时发生的情况:

  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 创建新记录,这是在所有模型中添加的扩展,例如电子邮件:

  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

这个例子更适合单元测试。尽管您在控制器中触发操作,但逻辑在模型中。

应该为Test::Unit. 诸如上下文和匹配器之类的东西。

我会这样测试:

上下文'.new_todos'做
  设置做
    @campaign = Campaign.create(:name => '我的活动')
    @email = @campaign.emails.build(:subject => '测试活动电子邮件')
    @email.save
    @email.new_todos
  结尾

  应该“为所有联系人生成待办事项”
    断言@email.todos.count > 0
  结尾
结尾

显然,示例属性需要更改,并且您需要确保获得所需的结果(我猜测并使用过@email.todos),但这是一个开始。如果您可以尝试一下,看看会发生什么,我会很乐意更新。

要在控制器中对此进行测试,您需要进行功能测试或集成测试。使用 shoulda 进行功能测试也很容易。看起来像这样:

上下文 'POST to :create' 做
  设置做
    @campaign = Campaign.create(:name => '我的活动')
    @email = 'test@test.com' # 或您期望的任何数据
    发布 :create, :campaign_id => @campaign.id, :email => @email
  结尾

  应该 response_with(:redirect)
  应该 redirect_to('/some/path')
结尾

这是一个开始。祝你好运!

于 2010-12-23T19:41:19.517 回答