Rails控制器中的功能测试重定向

时间:2009-05-18 22:08:09

标签: ruby-on-rails ruby testing

我正在尝试这样做,当通过创建的动作创建模型时,它会重定向到其show动作。那部分工作正常,但我不能让我的功能测试表现。这些测试已经从脚手架提供的内容进行了修改。

  def setup
    @thing = Factory(:thing)
    assert(@thing.id, "Virtual fixture not valid.")
  end

  def test_create_valid
    Thing.any_instance.stubs(:valid?).returns(true)
    post :create
    assert_redirected_to @thing
  end

我在设置中使用factory_girl。当我运行我的测试时,我得到了这个:

  

预期的响应是重定向到http://test.host/thing/2但是   是重定向到http://test.host/thing/3

我已经完成了与此控制器中的更新操作非常相似的内容,并且测试看起来相同,但它可以正常工作。对于发生的事情,我有点困惑。

编辑:Maximiliano在下面指出这可能是因为这会在数据库中创建一条新记录,因此会重定向到该记录。如何找到刚使用创建发布请求创建的新记录?

2 个答案:

答案 0 :(得分:1)

在Max的帮助下计算出来(谢谢!)为了获得在数据库中创建的对象,我必须使用assigns():

assert_redirected_to指定(:事物)

答案 1 :(得分:0)

免责声明:(我还没有使用过工厂女孩......所以带上一粒盐) 是不是你的工厂创建数据库记录?如果是这样的话,你要创造它两次,一次是工厂,另一次是控制器;那么新记录与工厂的ID不同是正常的......