使用带有Rspec的request-url的测试控制器方法

时间:2014-01-04 08:42:37

标签: ruby-on-rails ruby testing rspec

我为Rails编写了一个gem,它使用某种方法扩展ApplicationController。此方法解析当前URL并使用结果进行查找。它看起来像这样(简化):

@current_account = Account.where(subdomain => request.subdomains.first).first

我想在gem中包含一个测试,断言根据给定的URL正确查找子域。

我在尝试编写测试时遇到两个问题:

1)因为我在gem中测试,没有控制器(或Rails应用程序),所以我实际上不知道从哪里开始(单元测试,控制器测试?)

2)我到处搜索,但是我找不到在Rspec中设置request哈希进行测试的方法。我希望我可以做request.url = 'account1.example.com'

之类的事情

非常感谢有关如何在Rspec上针对此情况设置正确测试的任何帮助

1 个答案:

答案 0 :(得分:0)

如果您正在进行控制器测试,则通常会在配置中指定URL,例如:

config.action_controller.default_url_options = { host: 'www.test.host' }

也就是说,如果您将其作为rails应用程序进行测试。

要测试抽象类中的方法是否有效,最好的选择是创建一个Test Subclass,并使用它进行测试。像

这样的东西
class TestController < ApplicationController; end

然后围绕此控制器执行您的规范,该控制器的行为应与ApplicationController

完全相同

修改

这将是我提议的一个例子:

class TestController < ApplicationController
  def index
    render text: 'fake page' #This is so the action does not fail
  end

end

describe TestController do
  it 'searches for the current account in the right subdomain' do
    Account.should_receive(:where).with({subdomain: 'www'})

    get :index
  end
end