我正在干我的规格,但是对控制器测试提出动态请求有问题

时间:2015-11-05 16:15:30

标签: ruby-on-rails rspec

我注意到我一直在为某些用户禁止的操作重复相同的规范。特别是当不允许操作时,重定向和闪存应该总是相同(或多或少),所以我尝试写这样的shared_example

  shared_examples_for "no access" do |action|
    it "redirects the user to the homepage" do
      get action
      subject.should redirect_to('/')
    end

    it "sets a flash message" do
      get action
      expect(controller).to set_flash[:alert]
    end
  end

然后很快意识到get不接受动作变量作为变量。

有什么想法解决这个问题,或者以其他方式实现这样的目标吗?

1 个答案:

答案 0 :(得分:2)

指定您的共享示例,如下所示......

shared_examples "no access" do
  it "redirects the user to the homepage" do
    action
    expect(response).to redirect_to('/')
  end
end

然后在你的测试中,你将action作为一个let块传递......

it_behaves_like "no access" do
  let(:action) {get :show, id: my_record.id}
end