Kiểm tra bộ điều khiển RSpec - phản hồi trống .body


103

Tôi gặp sự cố khi kiểm tra bộ điều khiển của mình bằng RSpec - lệnh gọi response.body luôn trả về một chuỗi trống. Trong trình duyệt, mọi thứ hiển thị chính xác và các thử nghiệm tính năng của dưa chuột dường như làm đúng, nhưng RSpec mỗi lần như vậy đều thất bại.

Các kỳ vọng khác vào đối tượng phản hồi, chẳng hạn như response.should render_template('index')vượt qua mà không gặp bất kỳ sự cố nào.

Có ai trong số các bạn gặp phải vấn đề này trước đây không? Có lẽ html phản hồi có thể được lấy theo một số cách khác?

Đối với các phiên bản, Rails 2.1.0, RSpec 1.2.7.

Câu trả lời:


194

Theo mặc định, rspec-rails hack vào Rails để ngăn nó thực sự hiển thị các mẫu chế độ xem. Bạn chỉ nên kiểm tra hành vi của các hành động và bộ lọc kiểm tra bộ điều khiển của bạn, không phải kết quả của kết xuất mẫu - đó là thông số kỹ thuật chế độ xem.

Tuy nhiên, nếu bạn muốn làm cho thông số kỹ thuật bộ điều khiển của mình hiển thị các mẫu như ứng dụng bình thường, hãy sử dụng lệnh render_views:

describe YourController do
  render_views
  ...
end

2
Cảm ơn bạn, chính xác những gì tôi cần.
Toms Mikoss

2
Tôi đã làm việc với Rails trong nhiều năm và bây giờ tôi cuối cùng đã hiểu sự khác biệt giữa thông số kỹ thuật của bộ điều khiển và yêu cầu. Cảm ơn!
Brian Underwood


2

Khi tôi làm việc với một vấn đề tương tự (dẫn đến câu hỏi này), tôi chợt nhận ra rằng có nhiều cách khác nhau để lột da cùng một con mèo. Nói cách khác, thay vì kiểm tra phần nội dung, bạn có thể kiểm tra nội dung của đèn flash.

response.body.should =~ /Invalid email or password/

có thể là một séc tương đương với:

flash[:alert].should == "Invalid email or password"

Đối với tôi, cái sau có vẻ linh hoạt hơn một chút vì nó sẽ chạy theo cả hai cách, nhưng nó có thể không phù hợp trong mọi trường hợp.

Chúc mừng,

John


2

Theo mặc định, cấu hình RSpec-rails vô hiệu hóa việc hiển thị các mẫu cho thông số kỹ thuật của bộ điều khiển

Một trong những cách để khắc phục điều này là đảm bảo bật render_viewscài đặt trong rails_helper.rbtệp của bạn . Bằng cách này, bạn làm cho nó có thể hoạt động trên toàn cầu trong tất cả các thử nghiệm của bạn.

RSpec.configure do |config|
  config.render_views
end

Hoặc sử dụng khai báo render_views cho một nhóm riêng lẻ:

describe User do
  render_views
end

Bạn có thể đọc thêm về điều này ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.