我注意到我一直在为某些用户禁止的操作重复相同的规范。特别是当不允许操作时,重定向和闪存应该总是相同(或多或少),所以我尝试写这样的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不接受动作变量作为变量。
有什么想法解决这个问题,或者以其他方式实现这样的目标吗?
答案 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