如何在rspec中使用padrino辅助方法

如何在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 这是一个由两部分组成的问题。第一部分是我的方法甚至找不到当前用户。第二,我相信如果它被发现,它可能会抛出错误,因为会话没有被定义。但首先,为什么我要让未定义的方法成为当前

我正在使用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
此外,您的示例不起作用,因为它假定帮助程序是全局的,而不是全局的:它们的作用域由应用程序确定