2009-11-04 70 views
1

我正在做一些使用RSpec和Mocha的控制器测试。下面是一个例子变量在Rails控制器测试中传递

describe MenuItemsController, "creating a new menu item" do 
    integrate_views 
    fixtures :menu_items 

    it "should redirect to index with a notice on successful save" do 
    MenuItem.any_instance.stubs(:valid?).returns(true) 
    post 'create' 
    assigns[:menu_item].should_not be_new_record 
    flash[:notice].should_not be_nil 
    response.should redirect_to(menu_items_path) 
    end 
end 

我有一个关于这个例子

  1. 如果是POST方法(和其他REST动词)的文档几个问题吗?

  2. 如何对象由

    MenuItem.any_instance.stubs创建(?:有效)。返回(真)

    获得通过控制器行动?

  3. 问题2如何通过post方法直接传递参数给控制器?

+0

伟大的答案。谢谢!! – stellard 2009-11-05 01:38:19

回答

0

1.

Post对于

对于Get

对于Put

对于Delete

2.

它并没有真正通过。 您正在配置您的测试用例,因此 给定的调用有效吗?由MenuItem实例构成。 那么你的存根将被使用,并且这个的结果是有效的?检查将为真。 您正在决定这个有效的返回结果是什么?通话

3.

当你存根,在试运行的,而不是执行的代码正常, 此特定有效吗?在MenuItem实例上的;您的代码不会尝试确定您的menuItem是否有效。它只会返回您在存根中指定的值。在你的情况下为true

因此,在这里你不是测试你的MenuItem实例返回true,因为正确参数,但你正在测试当你的MenuItem实例返回true时发生了什么。

如果您可以轻松地设置一个带有参数的帖子,该参数将始终为您的MenuInstance项目输入一个valid? == true,但这对您来说可能并不实用。

但是,例如,当您有一段连接到WebService的代码时,可以使用一个存根,该存根返回连接不可用来测试Web服务关闭时代码中发生的情况。

+2

指向文档的链接不再有效。 – aardvarkk 2013-10-24 01:24:09

0
  1. 你可以找到在Rails docs

  2. 测试REST方法的对象不传递给控制器​​文档,它是由控制器创建。 MenuItem.any_instance.stubs(:valid?).return(true)确保任何MenuItem的实例在您的规范的上下文中创建将返回truevalid?方法。

  3. 残留方法的主要目的是隔离你正在测试的东西。如果您将参数传递给控制器​​,而不是只存储控制器测试所需的方法,则现在正在测试您的控制器您的型号。由于您可能在别处指定了您的模型,因此重复只会使您的规格更加复杂和脆弱。

    捻熄valid?方法返回true是降低维护选项时相比,通过所有必要的PARAMS会对自己的模型回归true

+0

链接到文档不再有效。 – aardvarkk 2013-10-24 01:24:48

相关问题