2014-11-10 23 views
6

Tôi mới đến minitest và vẫn còn mới với ruby ​​và thực sự mệt mỏi vì cố gắng google câu hỏi này mà không có kết quả. Tôi thực sự biết ơn sự giúp đỡ:Cú pháp assert_output của Ruby minitest

Cú pháp chính xác của assert_output trong minitest ruby ​​là gì?

Tất cả những gì tôi tìm thấy trên github hoặc ở nơi khác dường như sử dụng dấu ngoặc đơn. Tuy nhiên, tôi nhận được một thông báo lỗi khi tôi không sử dụng một khối với assert_output, mà có ý nghĩa như định nghĩa của phương pháp này có chứa một tuyên bố sản lượng.

Nhưng tôi không thể làm cho nó hoạt động, bất cứ điều gì tôi cố gắng.

testclass.rb

class TestClass 
    def output 
    puts 'hey' 
    end 
end 

test_test.rb

require 'minitest/spec' 
require 'minitest/autorun' 
require_relative 'testclass' 


class TestTestClass < MiniTest::Unit::TestCase 
    def setup 
    @test = TestClass.new 
    end 

    def output_produces_output 
    assert_output(stdout = 'hey') { @test.output} 
    end 
end 

Những gì tôi nhận được là:

kiểm tra hoàn thành trong 0.000000s, NaN kiểm tra/s, khẳng định NaN

0 kiểm tra, 0 xác nhận, 0 lỗi, 0 lỗi, 0 bỏ qua

Tôi đang làm gì sai? Nó phải là một cái gì đó hoàn toàn rõ ràng, nhưng tôi không thể tìm ra. Cảm ơn sự giúp đỡ của bạn.

Trả lời

10

Để phương pháp thử nghiệm của bạn chạy, tên phương thức cần phải bắt đầu bằng test_. Ngoài ra, cách thức assert_output hoạt động là khối sẽ ghi vào stdout/stderr và các đối số sẽ được kiểm tra nếu chúng khớp với stdout/stderr. Cách dễ nhất để kiểm tra IMO này là chuyển qua regexp. Vì vậy, đây là cách tôi sẽ viết bài kiểm tra đó:

class TestTestClass < MiniTest::Unit::TestCase 
    def setup 
    @test = TestClass.new 
    end 

    def test_output_produces_output 
    assert_output(/hey/) { @test.output} 
    end 
end 
+0

CẢM ƠN !! Vì vậy, nó đã được tên phương pháp không bắt đầu với 'thử nghiệm' và tôi đã đặt câu hỏi cú pháp. Cảm ơn bạn đã khuyên tôi nên tìm kiếm lâu hơn trên câu hỏi sai. – enahel

+0

Một câu hỏi nữa: Ví dụ hoạt động theo cách bạn đã viết nó với regex, nó cũng hoạt động theo cách tôi đã viết nó với stdout = 'hey'. Nó không hoạt động với chỉ assert_output ('hey') mà không có 'stdout ='. Tại sao vậy? – enahel

+1

Và - cuối cùng - tại sao tôi có thể có nhiều xác nhận hơn là chạy trong minitest? Trong ví dụ thực tế của tôi có một thử nghiệm duy nhất, nó nói "1 chạy, 2 xác nhận". (BTW Tôi có thể chặn đầu ra stdout thực tế của phương thức trong khi thử nghiệm để có dấu nhắc lệnh dễ đọc hơn không?) – enahel