ruby-on-rails – 如何编写一个RSpec控制器宏,它可以接受let或在
发布时间:2020-12-16 19:05:19 所属栏目:百科 来源:网络整理
导读:我使用Rails 3和RSpec 2.6.0. 不确定这是否可行,但这是我想做的事情: describe UsersController do let(:user) {Fabricate :user } describe "GET /user/:id" do should_return_401_code_if_user_is_not_confirmed :get,:show,:id = user.id end describe "
我使用Rails 3和RSpec 2.6.0.
不确定这是否可行,但这是我想做的事情: describe UsersController do let(:user) {Fabricate :user } describe "GET /user/:id" do should_return_401_code_if_user_is_not_confirmed :get,:show,:id => user.id end describe "PUT /user/:id" do should_return_401_code_if_user_is_not_confirmed :put,:update,:id => user.id end end 我试着像这样实现宏: module ControllerMacros def should_return_401_code_if_user_is_not_confirmed(verb,action,params = {}) it "returns a 401 code if the user is not an admin" do send verb,params response.code.should == "401" end end end 但是当运行这些规范时,我得到错误未定义的局部变量或方法’user’.我试图切换到在前一个块中定义的@user变量,但它也不起作用.我怀疑是因为我不是一个例子. 是否可以传递给let或在before块中定义的控制器宏参数? 谢谢! 解决方法
从阅读到rspec-users listserve上的
this thread,似乎答案是否定的.问题是你的let / before vars没有被初始化,直到它在宏体中阻塞,所以你不能将它们作为参数引用到宏调用.
我正在尝试在我正在处理的网站中做同样的事情.我要使用的解决方案是使用一个块来调用宏方法,该块将返回您想要的参数哈希值,然后使用宏体中的instance_eval来使用宏的范围来评估块. #spec ... describe "GET /user/:id" do should_return_401_code_if_user_is_not_confirmed :get,:show { {:id => user.id} } end #macro ... def should_return_401_code_if_user_is_not_confirmed(verb,¶ms_block) it "returns a 401 code if the user is not an admin" do params = instance_eval ¶ms_block send verb,params ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |