2013-04-16 19 views
5

Tôi có một đặc tả rspec:Làm thế nào để bao gồm định tuyến trong ApplicationHelper Spec khi chạy máng Trough?

require "spec_helper" 

describe ApplicationHelper do 
    describe "#link_to_cart" do 
    it 'should be a link to the cart' do 
     helper.link_to_cart.should match /.*href="\/cart".*/ 
    end 
    end 
end 

Và ApplicationHelper:

module ApplicationHelper 
    def link_to_cart 
    link_to "Cart", cart_path 
    end 
end 

này hoạt động khi đến thăm trang web, nhưng các thông số kỹ thuật thất bại với một RuntimeError về định tuyến không phải là có sẵn:

RuntimeError: 
    In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers 

Vì vậy, tôi đã bao gồm Rails.application.routes.url trong thông số kỹ thuật của mình, spec_helper -file và thậm chí là ApplicationHelper chính nó, t o không có kết quả.

Chỉnh sửa: Tôi đang chạy thử nghiệm qua spork, có thể phải làm với nó và đang gây ra sự cố.

Tôi phải bao gồm những người trợ giúp tuyến đường này khi chạy bằng Spork bằng cách nào?

Trả lời

7

Bạn cần thêm include ở cấp mô-đun là ApplicationHelper, vì ApplicationHelper không bao gồm trình trợ giúp url theo mặc định. Mã số như thế này

module AppplicationHelper 
    include Rails.application.routes.url_helpers 

    # ... 
    def link_to_cart 
    link_to "Cart", cart_path 
    end 

end 

Sau đó, mã sẽ hoạt động và thử nghiệm của bạn sẽ vượt qua.

+0

Tôi đã thử điều đó và không thực hiện được kiểm tra: thông báo lỗi vẫn giữ nguyên. – berkes

+1

@berkes, tôi đã xác minh rằng trong bảng điều khiển của mình trước khi đăng câu trả lời. Nó hoạt động. Trong câu hỏi của bạn, tôi chỉ thấy bạn đã đề cập bao gồm nó trong thử nghiệm, nhưng không phải mô-đun ApplicationHelper. Điều đó không đúng. –

+0

Nó cũng không phải 'ApplicationController', nhưng' ApplicationHelper' –

4

Nếu bạn đang sử dụng spork với rspec, bạn nên thêm các phương pháp url_helper để cấu hình rspec của bạn -

Bên trong tập tin '/ spec/spec_helper' của bạn:

RSpec.configure do |config| 
. 
. =begin 
. bunch of stuff here, you can put the code 
. pretty much anywhere inside the do..end block 
. =end 
config.include Rails.application.routes.url_helpers 
. 
. #more stuff 
end 

này tải một built-in ApplicationHelper gọi là "Routes" và gọi phương thức '#url_helpers' vào RSpec. Không cần phải thêm nó vào ApplicationHelper trong '/app/helpers/application_helper.rb' vì hai lý do:

1) Bạn chỉ sao chép chức năng 'lộ trình' vào một nơi không cần nó, về cơ bản bộ điều khiển đã thừa kế nó từ ActionController :: Base (tôi nghĩ. có lẽ :: Metal. không quan trọng bây giờ). vì vậy bạn không bị khô - Do not Repeat Yourself

2) Lỗi này là cụ thể để cấu hình RSpec, sửa chữa nó, nơi nó là phá sản (cách ngôn nhỏ của riêng tôi)

Tiếp theo, tôi khuyên bạn nên sửa chữa thử nghiệm của bạn một chút. Hãy thử điều này:

require "spec_helper" 

describe ApplicationHelper do 
    describe "#link_to_cart" do 
    it 'should be a link to the cart' do 
    visit cart_path 
    expect(page).to match(/.*href="\/cart".*/) 
    end 
    end 
end 

Tôi hy vọng điều này hữu ích cho người khác!

0

Tôi đã sử dụng guard với spring và tôi phát hiện ra rằng, trong trường hợp của tôi, vấn đề là do mùa xuân. Sau khi chạy spring stop nó đã được sửa. Nhưng nó vẫn quay trở lại đôi khi tôi thay đổi một cái gì đó trong một ApplicationController.

Các vấn đề liên quan