2012-04-12 31 views
19

在我的幫助模塊,我有:Rspec:如何在規範中指定request.env?

def abc(url) 
    ... 
    if request.env['HTTP_USER_AGENT'] 
    do something 
    end 
end 

在我的規格文件,我有:

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 

當我運行規範我有這樣的錯誤:

undefined local variable or method `request' for <ObjectWithDocHelperMixedIn:0x00000103b5a7d0> 

如何我是否在我的規格中存根request.env ['...']?

謝謝。

回答

10

嗯,你已經幾乎無關:

before(:each) do 
    @meth = :abc 

    request.env['HTTP_USER_AGENT'] = "..." 
end 

我只是給這個闖闖,這通過:

+0

我這樣做是控制器的規格,雖然從不在助手規格嘗試。 – apneadiving 2012-04-12 21:54:36

+0

感謝您的回覆。是的,我之前也嘗試過,但它在輔助規格中不起作用(至少在我的情況下)。 – RoundOutTooSoon 2012-04-12 21:58:35

+2

一個簡單的解決方法是將條件提取到助手中的方法並存根這些方法 – apneadiving 2012-04-12 22:04:18

1

試試這個:

stub(request).env { {"HTTP_USER_AGENT" => "Some String"} }

15

如果您使用的是rspec-rails,則可以在您的帳戶中使用controller.request幫手測試。

5

通過執行以下操作,可以覆蓋請求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