2010-07-27 25 views
13

thể bất cứ ai xin giải thích những gì mã kiểm tra này làm:Hiểu assert_difference trong đường ray ruby-on-

assert_difference('Post.count') do 
    post :create, :post => { :title => 'Hi', :body => 'This is my first post.'} 
end 

và ...

assert_difference 'ActionMailer::Base.deliveries.size', +1 do 
    post :invite_friend, :email => '[email protected]' 
end 

tôi không thể hiểu được nó mặc dù tôi đọc tài liệu.

Cảm ơn!

Trả lời

26

assert_difference xác minh rằng kết quả của việc đánh giá đối số đầu tiên của nó (một chuỗi có thể được chuyển đến eval) thay đổi theo một số tiền nhất định sau khi gọi khối đó đã được chuyển. Ví dụ đầu tiên ở trên có thể là "chưa được kiểm soát" tới:

before = Post.count # technically, eval("Post.count") 
post :create, :post => { :title => 'Hi', :body => 'This is my first post.'} 
after = Post.count 
assert_equal after, before + 1 
+0

nhưng tại sao ví dụ thứ 2 có +1 trong khi ví dụ đầu tiên không có tham số thứ hai? Sự khác biệt là gì? –

+0

@fayer - Tôi tin rằng mặc định là '+ 1'. Trong ví dụ thứ hai, họ chỉ nói rõ điều đó. –

+0

Đúng, mặc định là 1. –

6

này chỉ được kiểm tra để chắc chắn rằng số lượng các đối tượng cho bất cứ loại đã được chỉ định đã tăng thêm 1. (Đây là một cách dễ dàng để kiểm tra xem một đối tượng đã được thêm vào DB)

1

Xác nhận này là để xác minh sự khác biệt nhất định/được chỉ định trong đối số đầu tiên. Đối số thứ nhất phải là một chuỗi có nghĩa là "Post.count". Đối số thứ hai có giá trị mặc định 1, bạn cũng có thể chỉ định các số khác, ngay cả số negetive. để biết thêm chi tiết, hãy truy cập: http://api.rubyonrails.org/classes/ActiveSupport/Testing/Assertions.html

+0

thông tin nhờ người đàn ông –

0

Phương pháp này là để xác minh rằng có sự khác biệt về số giữa đối số đầu tiên và đối số thứ hai. Trong hầu hết các trường hợp, đối số đầu tiên là một chuỗi giống như “Post.count” và đối số thứ hai là một khối. Trong đường ray này chủ yếu được sử dụng trong thử nghiệm chức năng để kiểm tra xem một đối tượng có thể được lưu trong cơ sở dữ liệu hay không. Logic là trước khi một đối tượng mới được lưu, số lượng bản ghi trong bảng cụ thể đó phải khác với số lượng bản ghi sau khi đối tượng được lưu (từ 1 đến chính xác).

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