I've a view helper method which generates a url by looking at request.domain and request.port_string.
module ApplicationHelper
def root_with_subdomain(subdomain)
subdomain += "." unless subdomain.empty?
[subdomain, request.domain, request.port_string].join
end
end
I would like to test this method using rspec.
describe ApplicationHelper do
it "should prepend subdomain to host" do
root_with_subdomain("test").should = "test.xxxx:xxxx"
end
end
But when I run this with rspec, I get this:
Failure/Error: root_with_subdomain("test").should = "test.xxxx:xxxx" `undefined local variable or method `request' for #<RSpec::Core::ExampleGroup::Nested_3:0x98b668c>`
Can anyone please help me figure out what should I do to fix this? How can I mock the 'request' object for this example?
Are there any better ways to generate urls where subdomains are used?
Thanks in advance.
You have to prepend the helper method with 'helper':
describe ApplicationHelper do
it "should prepend subdomain to host" do
helper.root_with_subdomain("test").should = "test.xxxx:xxxx"
end
end
Additionally to test behavior for different request options, you can access the request object throught the controller:
describe ApplicationHelper do
it "should prepend subdomain to host" do
controller.request.host = 'www.domain.com'
helper.root_with_subdomain("test").should = "test.xxxx:xxxx"
end
end
This isn't a complete answer to your question, but for the record, you can mock a request using ActionController::TestRequest.new()
. Something like:
describe ApplicationHelper do
it "should prepend subdomain to host" do
test_domain = 'xxxx:xxxx'
controller.request = ActionController::TestRequest.new(:host => test_domain)
helper.root_with_subdomain("test").should = "test.#{test_domain}"
end
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With