2011-01-23 46 views
13

Nếu tôi có thông số kỹ thuật cần được chạy với các giá trị khác nhau để nó có thể thúc đẩy thực hiện thực sự và không phải là một cách ngây thơ. Ví dụ:Có thể có thông số kỹ thuật được tham số hóa trong RSpec không?

it "should return 'fizz' for multiples of three" do 
    @fizzbuzz.get_value(3).should == "fizz" 
end 

Cho đến giờ tôi chưa tìm được cách nào để chuyển 3 thành tham số. Các spec dưới đây giải quyết vấn đề của tôi nhưng tôi tự hỏi nếu đó là cách được đề nghị để làm điều đó hoặc nếu có bất kỳ khác, cách tốt hơn.

it "should return 'fizz' for multiples of three" do 
    [3, 6].each{|number| @fizzbuzz.get_value(number).should == "fizz" } 
end 

Tôi không thích điều này vì nó sử dụng vòng lặp, không thể đọc và chỉ hiển thị dưới dạng một thông số khi chạy, tôi muốn nó hiển thị dưới dạng hai thử nghiệm khác nhau.

Trả lời

20

Để tạo các bài kiểm tra riêng biệt bạn có thể làm:

[3, 6].each do |num| 
    it "should return 'fizz' for multiples of three (#{num})" do 
    @fizzbuzz.get_value(num).should == "fizz" 
    end 
end 

Bởi vì các file đặc tả rất đơn giản chạy như kịch bản ruby ​​bạn có thể sử dụng tất cả các ruby ​​tiêu chuẩn xây dựng để tạo ra các bài kiểm tra một cách nhanh chóng.

Thậm chí tốt hơn bạn có thể sử dụng Numeric#step để dễ dàng tạo một phạm vi kiểm tra nhất định, ví dụ: cho [3, 6, 9, 12, 15, 18]:

3.step(18, 3) do |num| 
    it "should return 'fizz' for multiples of three (#{num})" do 
    @fizzbuzz.get_value(num).should == "fizz" 
    end 
end 
Các vấn đề liên quan