2009-02-19 149 views
0

所以我决定调查Rails测试的状态。在阅读了一些关于如何讨论Rails的测试文档是否残暴的接受答案之后,我开始同意。到目前为止,我显然不在理解Rails测试的人群中 - 即使我理解了框架,或者我也这么认为。Shoulda:测试控制器过滤器

我读过Shoulda是一个很好的插件,所以我使用它。我的第一个测试:“确保方法需要一个ID参数”...确定这是有道理的;我想确保我的控制器上的before_filter:validate_id实际工作。这是测试我的索引的GET按其应有的方式工作所需的3中的第1步。失败!显然,测试环境中运行不同于正常的Rails堆栈:

... 
lib/action_controller/base.rb:524:in `process_without_filters' 
... 

检查,我到处都可以导致几乎没有任何信息,包括过滤器时的ActionController :: TestCase的用途得到{}。我在哪里加入“Rails测试人员俱乐部”,这样我可以弄清楚这一点?

context "GET :index requires id" do 

    setup {  
     get :index 
    } 

    should_redirect_to('/') { } 

    end 

回答

0

你确定失败与before_filters有什么关系吗?我不认为它确实如此。查看堆栈的其他错误......我可以用登录要求测试我的应用程序没有问题。

你断言该索引需要一个ID ...但请求没有一个。它是否因为没有ID而抛出错误?也许你需要捕捉它,或者用assert_raises测试失败模式。

+0

我的过滤器检测ID是否存在并且有效。如果不是,则重定向到“/”。我确信这是问题,因为我运行测试时得到的错误是id/filter生成的对象为nil的结果。 – Bill 2009-02-19 23:40:55

0

我同意安德鲁说,问题可能在别处。我有很多功能测试可以与控制器一起使用before_filters,并且从未遇到过您指定的问题。