2012-01-06 17 views
8

Tôi đang tạo một số thử nghiệm có nhiều yếu tố đầu vào khác nhau. Tôi đang thử nghiệm trang web mua hàng với các loại người dùng mới và cũ, các sản phẩm khác nhau, mã khuyến mại, tùy chọn thanh toán. Tôi cảm thấy như thế này là một tập kiểm tra dựa trên dữ liệu, có lẽ đang kêu gọi một định dạng csv hoặc bảng tính của các đầu vào thử nghiệm.Cách tốt nhất để tổ chức các thử nghiệm trong RSpec có một Kết hợp của hệ số

Tôi đã sử dụng rspec hoàn hảo cho tập kiểm tra cuối cùng mà tôi đã tạo.

Tôi muốn có định dạng kết quả nhất quán. Tôi bị mắc kẹt về cách sử dụng các bảng dữ liệu với RSpec. Có ai sử dụng RSpec với một bảng kiểm tra đầu vào?

Cảm ơn trước vì giải pháp trực tiếp hoặc lời khuyên âm thanh.

Trả lời

14

Nếu bạn đang sử dụng một bảng, tôi sẽ xác định nó trong dòng trong tập tin thử nghiệm một cái gì đó giống như ...

[ 
    %w(abc 123 def ), 
    %w(wxyz 9876 ab ), 
    %w(mn 10 pqrs) 
].each do |a,b,c| 
    describe "Given inputs #{a} and #{b}" do 
    it "returns #{c}" do 
     Something.whatever(a,b).should == c 
    end 
    end 
end 
+0

Đó là khá nhiều những gì tôi đang tìm kiếm ngoại trừ việc tôi sẽ làm bảng trên 'nó "nên làm bất cứ điều gì "làm" một phần. Cảm ơn! –

2
user_types = ['rich', 'poor'] 
products = ['apples', 'bananas'] 
promo_codes = [123, 234] 
results = [12,23,34,45,56,67,78,89].to_enum 
test_combis = user_types.product(products, promo_codes) 

test_combis.each do |ut, p, pc| 
    puts "testing #{ut}, #{p} and #{pc} should == #{results.next}" 
end 

Output:

testing rich, apples and 123 should == 12 
testing rich, apples and 234 should == 23 
testing rich, bananas and 123 should == 34 
testing rich, bananas and 234 should == 45 
testing poor, apples and 123 should == 56 
testing poor, apples and 234 should == 67 
testing poor, bananas and 123 should == 78 
testing poor, bananas and 234 should == 89 
2

Một cách tiếp cận thành ngữ sẽ là sử dụng RSpec shared examples với các tham số. Tôi sẽ giả định rằng mỗi hàng trong bảng tương ứng với một trường hợp thử nghiệm riêng biệt và các cột phá vỡ các biến có liên quan.

Ví dụ: giả sử bạn có một số mã tính giá của xe dựa trên cấu hình của nó. Giả sử chúng ta có một lớp Car và chúng tôi muốn thử nghiệm phương thức price phù hợp với giá bán lẻ đề xuất của nhà sản xuất (MSRP).

Chúng ta có thể được yêu cầu để kiểm tra các kết hợp sau đây:

 
Doors | Color | Interior | MSRP 
-------------------------------- 
4  | Blue | Cloth | $X 
2  | Red | Leather | $Y 

Hãy tạo một ví dụ chia sẻ để chụp thông tin này và kiểm tra đối với các hành vi đúng.

RSpec.shared_examples "msrp" do |doors, color, interior, msrp| 
    context "with #{doors} doors, #{color}, #{interior}" do 
    subject { Car.new(doors, color, interior).price } 
    it { should eq(msrp) } 
    end 
end 

Sau khi đã viết ví dụ được chia sẻ này, chúng tôi có thể thử nghiệm ngắn gọn nhiều cấu hình mà không bị trùng lắp mã.

RSpec.describe Car do 
    describe "#price" do 
    it_should_behave_like "msrp", 4, "Blue", "Cloth", X 
    it_should_behave_like "msrp", 2, "Red", "Leather", Y 
    end 
end 

Khi chúng tôi chạy spec này, sản lượng nên có dạng:

 
Car 
    #price 
    it should behave like msrp 
     when 4 doors, Blue, Cloth 
     should equal X 
     when 2 doors, Red, Leather 
     should equal Y 
Các vấn đề liên quan