如何在rspec中使用padrino辅助方法
我正在使用padrino和rspec,我希望能够测试我编写的助手方法 我有 spec/app/controllers/sessions\u controller\u spec.rb app/controllers/sessions\u controller.rb app/helpers/sessions\u helper.rb 这是一个由两部分组成的问题。第一部分是我的方法甚至找不到当前用户。第二,我相信如果它被发现,它可能会抛出错误,因为会话没有被定义。但首先,为什么我要让未定义的方法成为当前用户如何在rspec中使用padrino辅助方法,rspec,padrino,Rspec,Padrino,我正在使用padrino和rspec,我希望能够测试我编写的助手方法 我有 spec/app/controllers/sessions\u controller\u spec.rb app/controllers/sessions\u controller.rb app/helpers/sessions\u helper.rb 这是一个由两部分组成的问题。第一部分是我的方法甚至找不到当前用户。第二,我相信如果它被发现,它可能会抛出错误,因为会话没有被定义。但首先,为什么我要让未定义的方法成为当前
Failures:
1) SessionsController POST /users should populate current_user after posting correct user/pass
Failure/Error: current_user.should_not == "null"
NameError:
undefined local variable or method `current_user' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2:0x0000000313c0d8>
# ./spec/app/controllers/sessions_controller_spec.rb:20:in `block (3 levels) in <top (required)>'
这在他们的问题追踪器中得到了回答: 从那里剪切并粘贴: 速记助手这是一个Sinatra功能,不是Padrino功能,顺便说一句,由于以下原因很难测试:
MyApp.helpers do
def foo
end
end
是以下内容的简写:
helpers = Module.new do
def foo
end
end
MyApp.helpers helpers
因此,可测试性的问题是显而易见的:helpers是一个匿名模块,很难引用匿名的内容。解决方案很简单:明确模块:
module MyHelpers
def foo
end
end
MyApp.helpers MyHelpers
然后以您想要的任何方式进行测试,例如:
describe MyHelpers do
subject do
Class.new { include MyHelpers }
end
it "should foo" do
subject.new.foo.should == nil
end
end
此外,您的示例不起作用,因为它假定帮助者是全局的,而不是全局的:它们的范围由应用程序决定。这在他们的问题跟踪程序中得到了回答: 从那里剪切并粘贴: 速记助手这是一个Sinatra功能,不是Padrino功能,顺便说一句,由于以下原因很难测试:
MyApp.helpers do
def foo
end
end
是以下内容的简写:
helpers = Module.new do
def foo
end
end
MyApp.helpers helpers
因此,可测试性的问题是显而易见的:helpers是一个匿名模块,很难引用匿名的内容。解决方案很简单:明确模块:
module MyHelpers
def foo
end
end
MyApp.helpers MyHelpers
然后以您想要的任何方式进行测试,例如:
describe MyHelpers do
subject do
Class.new { include MyHelpers }
end
it "should foo" do
subject.new.foo.should == nil
end
end
此外,您的示例不起作用,因为它假定帮助程序是全局的,而不是全局的:它们的作用域由应用程序确定