如何在Rails中存根或模拟request.subdomains方法?

时间:2009-06-17 02:37:51

标签: ruby-on-rails mocking integration-testing stubbing

我正在尝试在我的rails应用程序中编写一些功能测试,并在application_controller.rb中我有这个:

before_filter :current_account
def current_account
  @current_account ||= Account.find_by_subdomain!(request.subdomians.first)
end

运行测试时,request.subdomains不包含我正在寻找的有效子域,并且无法运行任何功能测试。

是否可以存根current_account方法或模拟request.subdomains对象?

3 个答案:

答案 0 :(得分:5)

在功能测试中你应该能够(使用mocha):

@request.expects(:subdomains).returns(['www'])

答案 1 :(得分:1)

对我(以及Rails 2.3.4),正确的陈述是

@controller.request.expects(:subdomains).returns(['www'])

因为我无法直接访问@request。

答案 2 :(得分:1)

@controller.instance_variable_set(:@request, OpenStruct.new({:subdomains => 'www'}))

你可以访问ruby中的任何内容:)