2009-04-08 32 views
5

Khi tôi chạy một bài đăng trong Rails của tôi chức năng kiểm traTại sao bài đăng không thành công trong bài kiểm tra chức năng Rails của tôi?

setup do 
    post :create, :user => Factory.attributes_for(:user) 
end 

và nó không thành công, tôi không nhận được bất kỳ thông tin phản hồi là tại sao. Tôi biết rằng nó không thành công vì xác nhận của tôi để đảm bảo rằng có thêm một bản ghi trong cơ sở dữ liệu không thành công.

tôi đã cố gắng để làm

setup do 
    post :create, :user => Factory.attributes_for(:user) 
    assert_valid @controller.object 
end 

nhưng đối tượng là một phương pháp bảo vệ.

Làm cách nào để kiểm tra lỗi trên đối tượng mô hình phát sinh từ cuộc gọi sau?

Tôi đang sử dụng Shoulda và Factory Girl, nhưng tôi nghi ngờ điều đó không quan trọng.

Trả lời

6

Thêm sự khẳng định sau đây:

assert_nil assigns(:user).errors 

Mà sẽ thất bại nếu có lỗi khi lưu đối tượng của bạn (có lẽ là một xác nhận), và cho bạn thấy giá trị của sai sót đối tượng.

+0

thực hiện chính xác những gì tôi muốn. cảm ơn! – dbrown0708

+0

Cảm ơn! Điều này đã giúp tôi rất nhiều! :) – CalebHC

0

Tôi đang sử dụng đường ray 3.2.13 và có vẻ như assert_nil không hoạt động đúng như đã nêu trong câu trả lời trước.

Đây là những gì làm việc cho tôi:

assert_empty assigns(:user).errors 

Tôi tin rằng đây là bởi vì ngay cả một thành công "tiết kiệm" gọi trả về một ActiveRecord: đối tượng lỗi chứa với một băm rỗng của "thông điệp" vì vậy bạn cũng có thể làm này:

assert_empty assigns(:user).errors.messages 
Các vấn đề liên quan