【问题标题】:Testing ActiveAdmin with Rspec 3 - some controller actions not hit使用 Rspec 3 测试 ActiveAdmin - 一些控制器操作未命中
【发布时间】:2019-08-22 13:16:00
【问题描述】:

我想测试一个我知道有效的销毁操作,但我想对其进行测试。

这是一个破坏动作。 路线: DELETE /journals/:id(.:format) journals#destroy

在 admin/journals.rb 注册块中有一个 controller 块来覆盖销毁方法。

ActiveAdmin.register Journal do
  controller do 
    def destroy
      # do stuff and redirect. 
    end 
  end
end

我的测试

require 'rails_helper'
RSpec.describe JournalsController, type: :controller do

  let!(:journal) { Journal.create(title: 'Title1') }

  it 'sets the out_of_stock attribute to true' do

    expect {
     delete :destroy, params: { id: journal.id }
   }.to change { journal.reload.out_of_stock }.from(false).to(true)

  end
end

由于某种原因,这不会命中方法,也不会通过。

结果

1) JournalsController destroy journal is in stock and receives destroy sets the out_of_stock attribute to true
 Failure/Error:
   expect {
     delete :destroy, params: { id: journal.id }
   }.to change { journal.reload.out_of_stock }.from(false).to(true)

   expected `journal.reload.out_of_stock` to have changed from false to true, but did not change
 # ./spec/controllers/journals_controller_spec.rb:15:in `block (4 levels) in <top (required)>'

如果我以相同的方式覆盖 #show 并从规范中调用它 get :show, params: {id: journal.id } 它确实命中了注册块内的动作。

我已经尝试过其他教科书上的控制器事务示例,例如创建用户,但它不起作用。

但是,我确实有一个通过测试的 api 命名空间。它只调用 get :index。

是否有一些我没有的特殊 AA rspec 设置?也许在 spec_helper/rails_helper 中。

如何让我的测试触动我的行动?

感谢任何帮助。

【问题讨论】:

  • 它确实命中了销毁操作。在测试用例@VeryPoliteNerd 中,只有参数“out_of_stock”没有按预期更改。
  • 您可以查看测试应用程序日志以检查请求的处理方式。
  • @Aarthi。我真的不认为它会。我打印了文本,甚至在方法中引发了异常,以查看它是否被命中。当我做同样的事情时,我在运行测试时得到了输出。我没有在销毁案例中,但像正常一样从 GUI 调用操作确实产生了预期的输出 - 打印字符串并引发异常。
  • 我想通了。测试被 check_permission 钩子捕获并被重定向。正是我想要的行为,但不是我正在测试的行为。那好吧。谢谢! @Aarthi

标签: ruby-on-rails rspec activeadmin rspec-rails


【解决方案1】:

事实证明我没有考虑一些权限检查并且测试被重定向。设置一个具有正确角色的 current_user(在我的情况下)解决了这个问题。最终调用了销毁操作。

【讨论】:

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