2012-04-12 37 views
19

Trong mô-đun helper tôi, tôi có:Rspec: cách yêu cầu spec.env trong thông số trợ giúp?

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

Trong file spec của tôi, tôi có:

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 

Khi tôi chạy spec Tôi có lỗi này:

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

thế nào thế nào để tôi stub cho request.env ['...'] trong thông số kỹ thuật của tôi?

Cảm ơn.

Trả lời

10

Vâng, bạn đã gần như không có gì để làm:

before(:each) do 
    @meth = :abc 

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

Tôi chỉ đưa ra này thử khác và điều này đi:

+0

Tôi làm điều này trong thông số kỹ thuật điều khiển mặc dù ... không bao giờ cố gắng trong thông số kỹ thuật helper. – apneadiving

+0

cảm ơn câu trả lời của bạn. Vâng, tôi đã thử điều đó trước đó nhưng nó không hoạt động trong các thông số kỹ thuật trợ giúp (ít nhất là trong trường hợp của tôi). – RoundOutTooSoon

+2

một cách dễ dàng là giải nén điều kiện cho các phương thức trong trình trợ giúp của bạn và đưa ra các phương thức đó – apneadiving

1

Hãy thử điều này:

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

15

Nếu bạn đang sử dụng rspec-rails, bạn có thể sử dụng controller.request trong kiểm tra helper.

5

Bạn có thể ghi đè tác nhân người dùng được đặt trong yêu cầu env bằng cách làm như sau.

before(:each) do 
    @meth = :abc 
    helper.request.user_agent = 'something else' 
end 

Sau đó, trong spec của bạn:

it "does stuff" do 
    expect(helper.send(@meth, "some_url")).to # ... 
end 
Các vấn đề liên quan