Ответ 1
Если вы используете rspec-rails, вы можете использовать controller.request
в своих вспомогательных тестах.
В моем вспомогательном модуле у меня есть:
def abc(url)
...
if request.env['HTTP_USER_AGENT']
do something
end
end
В моем файле spec я:
describe "#abc" do
before(:each) do
@meth = :abc
helper.request.env['HTTP_USER_AGENT'] = "..."
end
it "should return the webstart jnlp file" do
@obj.send(@meth, "some_url").should ....
end
end
Когда я запускаю spec, у меня есть эта ошибка:
undefined local variable or method `request' for <ObjectWithDocHelperMixedIn:0x00000103b5a7d0>
Как я закрою для request.env ['...'] в моих спецификациях?
Спасибо.
Если вы используете rspec-rails, вы можете использовать controller.request
в своих вспомогательных тестах.
Ну, вам почти ничего не нужно делать:
before(:each) do
@meth = :abc
request.env['HTTP_USER_AGENT'] = "..."
end
Я просто попробовал еще одну попытку, и это пройдет:
#in helper
def foo
request.env['HTTP_USER_AGENT']
end
#spec
it "foo" do
helper.request.env['HTTP_USER_AGENT'] = 'foo'
expect(helper.foo).to eq 'foo'
end
Вы можете переопределить пользовательский агент, установленный в запросе env, выполнив следующие действия.
before(:each) do
@meth = :abc
helper.request.user_agent = 'something else'
end
Затем в вашей спецификации:
it "does stuff" do
expect(helper.send(@meth, "some_url")).to # ...
end
Попробуйте следующее:
stub(request).env { {"HTTP_USER_AGENT" => "Some String"} }
для тех, кто использует спецификации запроса вместо спецификаций контроллера и хочет установить request.env
, можно сделать это следующим образом:
Rails.application.env_config["whatever"] = "whatever"
это сделает request.env["whatever"]
доступным в ваших контроллерах со значением, которое вы дали в своих спецификациях.