【问题标题】:How to DRY up controller tests如何干掉控制器测试
【发布时间】:2015-09-23 14:40:56
【问题描述】:

我有几十个控制器测试符合:

test "GET #show when not authenticated" do
  get :show, { id: 1 }
  assert_redirected_to '/login'
end

但我的application_controller默认是锁定的。

class ApplicationController < ActionController::Base
  before_action :ensure_logged_in
end

我不应该将此测试添加到每个控制器测试中。但我不想只测试一个控制器。

如何测试我的应用程序是否已被锁定,而不会因为这种重复而导致我的控制器测试乱七八糟?

【问题讨论】:

  • 测试时测试一次ApplicationController
  • @BroiSatse 但是 ApplicationController 没有任何动作,或者任何渲染视图的东西,没有任何路由。
  • RSpec 允许您创建匿名控制器,在其上定义虚假操作并测试其行为是否正常,因为它继承自另一个控制器。此处的文档:relishapp.com/rspec/rspec-rails/docs/controller-specs/…
  • @BroiSatse 我没有使用 Rspec。我正在使用默认的 Rails 测试堆栈,它是 minitest 和一些糖。但推理应该站在任何一边。我试试看。
  • in RSpec Shared Examples 可以派上用场来干燥这些东西:relishapp.com/rspec/rspec-core/docs/example-groups/…

标签: ruby-on-rails testing minitest


【解决方案1】:

你可以使用:

test "Should redirect to login when user is not logged in"  do
    [:show, :edit, :new].each do |action|
      get action, {id: 1}
      assert_redirected_to '/login'
    end
end

并将此测试命名为:

测试'未授权时重定向到登录页面'做

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多