2009-12-10 25 views
10

Mọi người đều biết rằng thử nghiệm tự động là một điều tốt.Các xác thực gốc có nên được kiểm tra trong đường ray không?

Không phải ai cũng biết rõ những gì cần kiểm tra.

Câu hỏi của tôi là nếu xác thực gốc như validate_presence_of, validate_uniqueness_of và như vậy sẽ được kiểm tra trong ứng dụng.

Trong văn phòng của tôi, chúng tôi là ba, người ta nghĩ rằng nó nên được kiểm tra, một người nghĩ rằng nó không nên và tôi đang lên trong không khí.

Trả lời

18

Có.

Kiểm tra xem thuộc tính mô hình có hiện diện hay không chỉ kiểm tra mã validates_presence_of như một sản phẩm phụ của thử nghiệm thực tế là validates_presence_of tồn tại trong mô hình của bạn.

Nếu ai đó nhận xét một loạt mã xác nhận và sau đó quên bỏ ghi chú thì điều này sẽ không bị phát hiện và có thể gây ra tất cả các loại sự cố.

Tôi thử nghiệm chúng, không phải vì tôi nghĩ rằng chúng không hoạt động nhưng để đảm bảo chúng có mặt trong mô hình của tôi khi được yêu cầu.

+1

> Tôi thử nghiệm chúng, không phải vì tôi nghĩ rằng chúng không hoạt động nhưng để đảm bảo chúng có mặt trong mô hình của tôi khi được yêu cầu –

3

Bạn có dự định viết các bài kiểm tra đơn vị cho mọi phương thức API và toán tử Ruby đơn lẻ không?

Bài kiểm tra đơn vị của bạn nên kiểm tra mã của riêng bạn, không phải của người khác - đó là công việc của họ, tại sao lại sao chép công việc của họ? Và nếu bạn không tin tưởng họ làm tốt công việc của họ, tại sao bạn lại sử dụng mã của họ?

+1

Bài kiểm tra đơn vị có hai mục tiêu chính. Một là đảm bảo việc thực hiện là âm thanh, nhưng quan trọng hơn nhiều là thứ hai: đảm bảo hành vi sẽ không thay đổi khi thực hiện thay đổi. – beauby

1

Kiểm tra mã bạn viết. ActiveRecord có phạm vi kiểm tra tuyệt vời bao gồm bảo hiểm cho các phương thức lớp xác nhận.

Spec:

require 'spec_helper' 

describe User do 
    before(:each) do 
    @user = User.new 
    end 

    it "should not be valid without an email" do 
    @user.save.should be_false 
    @user.should_not be_valid 
    @user.email = "[email protected]" 
    @user.should be_valid 
    @user.save.should be_true 
    end 

end 

Để có được thông số này để vượt qua bạn sẽ cần

class User < ActiveRecord::Base 
    validates_presence_of :email 
end 
+0

Bạn đang thực sự thực hiện việc này nhiều hơn tôi và thử nghiệm ActiveRecord. Nếu người dùng không hợp lệ thì việc lưu sẽ luôn là sai. Tôi thậm chí sẽ không kiểm tra tiết kiệm của hồ sơ trong bài kiểm tra đơn vị (với một vài ngoại lệ duy nhất và các hiệp hội là 2 mà đôi khi tôi có thể viết cho DB) –

+0

Tôi thấy quan điểm của bạn. Tôi đồng ý với kỳ vọng trên, nhiều người sẽ nói rằng việc kiểm tra hồ sơ không được lưu là không cần thiết. Những người khác sẽ không đồng ý. Ý tưởng là để kiểm tra hành vi. Đôi khi bạn cần phải kiểm tra lợi nhuận tiết kiệm sai, ví dụ: nếu bạn có mã như before_save: process_credit_card,: if =>: card_attributes_updated? có thể thêm lỗi vào cơ sở nếu một cuộc gọi đến cổng thanh toán trả về một repsonse không hợp lệ, hợp lệ? sẽ đúng ngay cả khi bản ghi có thể không phải là –

4

Matthew Bass có một viên ngọc lớn ông được phát hành với giá chỉ loại điều. Nó bổ sung thêm các trình đối sánh rspec kiểm tra để đảm bảo rằng việc xác nhận hợp lệ được thực hiện mà không thực sự chạy mã ActiveRecord cơ bản. Read more about it here.

Nó cho biết thêm quẹt cho xác thực:

it_should_validate_presence_of  :first_name, :last_name, :email 
it_should_validate_numericality_of :zip 
it_should_validate_uniqueness_of :email 
it_should_validate_inclusion_of :gender, :in => %w(Male Female) 

Cũng quẹt cho các hiệp hội:

it_should_belong_to :employer 
it_should_have_many :friends, :romans, :countrymen 
it_should_have_one :account 
it_should_have_and_belong_to_many :comments 

Và một vài bổ sung hữu ích khác:

# tests that User.count increases by 1 
it_should_be_createable :with => {:first_name => 'Ed', :last_name => 'The Duck', :email => '[email protected]'} 

# tests that the attribute is protected 
it_should_protect :email 

Đó không phải bởi bất kỳ phương tiện một đầy đủ danh sách. Tôi đã có một ngã ba, nơi tôi đã thêm một vài người khác tôi cần thiết, có khả năng có những người khác nổi xung quanh là tốt. Đó là một cách tiếp cận tốt và cho tôi phù hợp với nền tảng trung gian giữa việc đảm bảo các xác nhận vẫn còn trong mô hình, và phải viết một cách rõ ràng các kiểm thử để thực thi mã ActiveRecord để đảm bảo nó.

+0

+1 điều này có vẻ rất đẹp. –

+0

Đây là một gợi ý tốt. Nó đã xem xét Shoulda, mà làm cho thử nghiệm này rất dễ dàng, nhưng sử dụng RSPec (vì tôi thích nó tốt hơn cho tất cả các phần còn lại :), và tôi thực sự bị mất một cái gì đó như thế này. – nathanvda

3

Đây là nơi các công cụ như Shoulda thực sự hữu ích. Tôi nghĩ rằng nó hoàn toàn tùy thuộc vào bạn để kiểm tra cách bạn viết mã bằng các công cụ mà mọi người cung cấp cho bạn.Chỉ vì bạn đang sử dụng has_many, không có nghĩa là bạn đang sử dụng nó đúng!

Nghiêm túc, nếu bạn tích hợp Shoulda vào hỗn hợp, nó trở nên tầm thường để kiểm tra những thứ này. nếu bạn chạy rcov, nó sẽ cho bạn biết tất cả các mã bạn đã viết không được kiểm tra đầy đủ, trừ khi bạn làm.

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