【问题标题】:Shoulda: Testing controller filters应该:测试控制器过滤器
【发布时间】:2009-02-19 19:22:55
【问题描述】:

所以我决定调查 Rails 的测试状态。在阅读了一些关于 Rails 测试文档如何糟糕的 SO 上已接受的答案后,我开始同意。到目前为止,我显然不在了解 Rails 测试的人群中——尽管我对框架非常了解,或者我是这么认为的。

我已经读到,Shouda 是一个很好的插件,所以我正在使用它。我的第一个测试:“确保方法需要一个 ID 参数”......嗯,这是有道理的;我想确保我的控制器上的 before_filter :validate_id 确实有效。这是测试我的索引的 GET 是否按预期方式工作所需的 3 步中的第 1 步。失败!显然,测试环境的运行方式与普通 Rails 堆栈不同:

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

当 ActionController::TestCase 使用 get {} 时,在我能检查的所有地方几乎没有包含过滤器的信息。我应该在哪里加入“Rails 测试人员俱乐部”以便解决这个问题?

  context "GET :index requires id" do

    setup {      
      get :index
    }

    should_redirect_to('/') { }

  end

【问题讨论】:

    标签: ruby-on-rails integration-testing filter shoulda


    【解决方案1】:

    您确定失败与 before_filters 有关吗?我认为不会。进一步查找堆栈以查找其他错误...我可以使用登录要求测试我的应用程序没有问题。

    您断言该索引需要一个 id...但在没有 ID 的情况下请求它。是因为没有id而抛出错误吗?也许你需要抓住它,或者用 assert_raises 测试失败模式。

    【讨论】:

    • 我的过滤器检测 id 是否存在且有效。如果不是,它会重定向到“/”。我确定这是问题所在,因为我在运行测试时遇到的错误是由 id/filter 生成的对象为 nil 的结果。
    • 如果您在运行测试时遇到错误,您的测试不一定会损坏。由于代码错误和逻辑,测试失败,如果你编写测试,你会看到很多两者。仔细查看错误,它应该告诉您(尽管有时是间接的)出了什么问题以及如何修复它。这似乎是一个简单的情况;如果您发布错误,应该不难找出问题所在。
    【解决方案2】:

    我同意 Andrew 的观点,即问题可能出在其他地方。我有很多功能测试可以与带有 before_filters 的控制器一起使用,并且从未遇到您指定的问题。

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多