我为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上针对此情况设置正确测试的任何帮助
答案 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