2013-03-14 27 views
6

Dưới đây là một dòng từ tập tin test.rb environnment của tôi trong một ứng dụng Rails 3.1.12:test.host trong rspec thử nghiệm Rails chuyển hướng

config.action_mailer.default_url_options = config.action_controller.default_url_options = { :host => "127.0.0.1", :port => 3000 } 

Bây giờ đây là bài kiểm tra tôi thực hiện:

subject { get :success } 
subject.should redirect_to(:home) 

này tạo ra một lỗi:

Failure/Error: subject.should redirect_to(:home) 
     Expected response to be a redirect to <http://127.0.0.1:3000/> but was a redirect to <http://test.host/> 

Tôi đã làm gì sai? Hoặc người nào khác, nơi máy chủ thử nghiệm được cấu hình?

Đây là tệp spec_helper.rb để tham khảo đầy đủ.

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] = 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'capybara/rspec' 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    # ## Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    # If true, the base class of anonymous controllers will be inferred 
    # automatically. This will be the default behavior in future versions of 
    # rspec-rails. 
    config.infer_base_class_for_anonymous_controllers = false 

    # Run specs in random order to surface order dependencies. If you find an 
    # order dependency and want to debug it, you can fix the order by providing 
    # the seed, which is printed after each run. 
    #  --seed 1234 
    config.order = "random" 
end 
Capybara.configure do |config| 
    config.app_host = 'http://127.0.0.1' 
    config.server_port = 3000 
end 

Trả lời

6

Để thiết lập các máy chủ ứng dụng và cổng máy chủ với Capybara thêm dòng sau vào tập tin spec/spec_helper.rb bạn

Capybara.configure do |config| 
    config.app_host = 'http://127.0.0.1' 
    config.server_port = 3000 
end 

- Chỉnh sửa # 1

Một cái nhìn tổng quan tốt đẹp của lĩnh vực thử nghiệm có sẵn tại http://blog.joncairns.com/2012/12/testing-domains-with-rails-and-test-unit/

+1

này dường như không làm việc cho tôi. Tôi đã cập nhật câu hỏi với nội dung trợ giúp thông số. – conradkdotcom

+0

Bạn vẫn nhận được thông báo lỗi tương tự khi bạn thêm tùy chọn cấu hình Capybara? –

+1

Có. Lỗi tương tự. Để giải quyết vấn đề này, tôi đã sử dụng 'home_path' thay cho bây giờ. Nhưng điều này không kiểm tra miền, đó là một vấn đề về lâu dài. – conradkdotcom

2

Điều này làm việc cho tôi:

# spec/controllers/whatever_controller_spec.rb 
before :each do 
    @request.host = '127.0.0.1:3000' 
end 

Dựa trên liên kết @ dan-reedy được cung cấp. Thật khó chịu khi phải cấu hình chính xác các tham số tương tự trong cấu hình/môi trường, spec/spec_helper.rb và một lần nữa ở đây ... tất cả theo các cách khác nhau (với 'http: //' hoặc không có, với số cổng hoặc cổng được chỉ định riêng biệt). Ngay cả cú pháp Capybara.configure dường như không thể duy trì sự nhất quán với chính nó giữa các phiên bản ...

Nhưng hãy thử xem liệu nó có giải quyết được không.

0

Đây là cách giải quyết mà dường như đã cố định vấn đề này cho tôi:

Trong đặc tả/rails_helper.rb thêm này

module ActionDispatch 
    class TestRequest 
    # Override host, by default it is test.host 
    def host 
     'localhost:3000' 
    end 
    end 
end 
Các vấn đề liên quan