Flo*_*nt2 7 macros controller ruby-on-rails
我使用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
Run Code Online (Sandbox Code Playgroud)
我试着像这样实现宏:
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, action, params
response.code.should == "401"
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是当运行这些规格时,我得到了错误undefined local variable or method 'user'.我试图切换到在前一个块中定义的@user变量,但它也不起作用.我怀疑是因为我不是一个例子.
是否可以传递给let或在before块中定义的控制器宏参数?
谢谢!
通过阅读rspec-users listserve上的这个帖子,看来答案是否定的.问题是你的let/before vars没有被初始化,直到it你的宏体中的块,所以你不能将它们作为参数引用到宏调用.
我正在尝试在我正在处理的网站中做同样的事情.我要使用的解决方案是使用一个块来调用宏方法,该块将返回您想要的参数哈希,然后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, action, ¶ms_block)
it "returns a 401 code if the user is not an admin" do
params = instance_eval ¶ms_block
send verb, action, params
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |