2012-01-25 33 views
11

đường ray rspec-ray (2.7.0) (3.0.10) bài đăng: Rails 3.1 Error Catching không liên quan đến tôi.Tại sao xem_all_requests_local không thành công với cấu hình rspec

Code:

class ApplicationController < ActionController::Base 
    unless Rails.application.config.consider_all_requests_local 
    rescue_from ActiveRecord::RecordNotFound, :with => :render_404 
    rescue_from Exception, :with => :render_500 
    rescue_from FunnyException, :with => :my_errors 

    def my_errors(exception) 
     #some stuff for production 
     puts "=======From top====#{Rails.application.config.consider_all_requests_local}" 
    end 
    else 
    rescue_from FunnyException, :with => :my_errors 
    def my_errors(exception) 
     #some stuff for development 
     puts "=====From bottom======#{Rails.application.config.consider_all_requests_local}" 
    end 
    end 
end 

Mã này hoàn toàn làm việc với sản xuất/phát triển ... vấn đề là khi tôi muốn thử nghiệm nó với rspec. Làm thế nào để chuyển đổi trường hợp thử nghiệm giữa các môi trường?

Tôi đã cố gắng thêm một cái gì đó như:

before do 
    Rails.application.config.consider_all_requests_local = true 
end 

tôi nhận được:

... ===== Từ đáy ====== đúng ===== Từ. đáy ====== đúng. ===== Từ đáy ====== đúng. ===== Từ đáy ====== đúng

nên cố gắng

before do 
    Rails.application.config.consider_all_requests_local = false 
end 

vì vậy tôi nhận được:

... ===== Từ đáy ====== sai ===== Từ đáy ====== sai ===.. == Từ số dưới ====== sai. ===== Từ dưới ====== false

Điều đó thậm chí còn có thể như thế nào? ... cùng với việc thay đổi spec_helper

config.before(:each) do 
    Rails.application.config.consider_all_requests_local = false 
end 

trừ khi không hoạt động. Đầu trang phần không thể truy cập được với rspec ... luôn truy cập Dưới cùng tại sao? Tôi giả sử nó bằng cách nào đó gắn bây giờ với Rack ... nhưng có giải pháp nào để tự động thay đổi hành vi này bên trong rspec?

liên quan

Trả lời

21

Ok tôi thấy giải pháp khá dễ dàng

before do 
    Rails.application.config.consider_all_requests_local = false 
    load "application_controller.rb" 
end 

after do 
    Rails.application.config.consider_all_requests_local = true 
    load "application_controller.rb" 
end 

Nó là một phần của ứng dụng ẩn danh bộ kiểm tra điều khiển.

Bạn phải thêm sau khi chặn ... vì thay đổi này sẽ tiếp tục tồn tại thông qua các suite khác.

Bất kỳ cải tiến đón: D

chỉnh sửa: Sử dụng Spork và bảo vệ nguyên nhân cho tôi lỗi đôi khi ngẫu nhiên ... trước: tất cả dường như để giải quyết vấn đề mà

+3

Tôi không chắc chắn nếu tình hình của tôi là như nhau, nhưng tôi đã phải thêm: 'Rails.application.config.action_dispatch.show_exceptions = true' vào khối trước. và '... = false' vào sau. –

+0

Giải pháp tuyệt vời, chính xác những gì tôi đang tìm kiếm. Cảm ơn bạn! –

+2

Nó không thành công đối với tôi khi tôi đang chạy bộ đầy đủ bằng cách sử dụng 'rake spec'. Nó chỉ chạy khi tôi chạy đặc tả 'feature' cụ thể .. –

0

Khối logic được xác định ở cấp lớp, được đánh giá trong thời gian tải lớp. Đây là lý do tại sao nó sẽ không đi đến 'else' ngay cả khi bạn tự đặt nó thành false tại thời gian chạy.

Tôi cũng tò mò muốn biết cách tốt nhất để kiểm tra điều này là gì. Đầu mối duy nhất của tôi là bằng cách nào đó tải lại hoặc đánh giá lại ActionController, tương tự như tải lại! phương pháp trong giao diện điều khiển đường ray.

0

tôi thấy rằng với dưa chuột-ray đúng cách làm việc đó là thêm thẻ @ allow-rescue.

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