2014-11-10 27 views
6

En ufak tefek yeniyim ve yine de bu yeni soruya cevaben ve sorgusuz olarak bu soruyu sormaktan gerçekten çok yoruldum. Yardım için çok minnettar olurum:Ruby minitest assert_output sözdizimi

Ruby minicikinde assert_output'un tam sözdizimi nedir?

Github'da veya başka bir yerde bulabildiğim her şey parantez kullanıyor gibi görünüyor. Yine de, assert_output ile bir blok kullanmadığımda bir hata mesajı alıyorum, bu da yöntemin tanımı bir getiri beyanı içerdiğinden anlam ifade ediyor.

Ancak, ne yaparsam yaparım.

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 

I get gerekenler: 0.000000s içinde

Biten testleri, NaN/s test NaN iddialar

0 test, 0 iddia, 0 hata, 0 hata, 0 atla

Neyi yanlış yapıyorum? Tamamen açık bir şey olmalı, ama anlayamıyorum. Yardımlarınız için teşekkürler.

cevap

10

Test yönteminizin çalışması için, yöntem adının test_ ile başlaması gerekir. Ayrıca, assert_output yolu, bloğun stdout/stderr'ye yazacağıdır ve argümanlar stdout/stderr ile eşleşirse kontrol edilir. Bu IMO'yu denetlemenin en kolay yolu bir regexp dosyasından geçmektir. Yani bu testi şöyle yazabilirim:

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

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

TEŞEKKÜR EDERİZ !! Yani 'test' ile başlamıyor yöntem adıydı ve ben sözdizimi sorgulanıyordu. Yanlış soruda daha fazla arama yapmam için bana teşekkür ettiğin için teşekkür ederim. – enahel

+0

Bir soru daha: Örnek, regex ile yazdığınız şekilde çalışıyor, aynı zamanda stdout = 'hey' ile yazdığım gibi çalışıyor. 'Stdout =' olmadan yalnızca assert_output ('hey') ile çalışmaz. Neden? – enahel

+1

Ve - son olarak - neden en çok iadeden daha fazla iddia alabilirim? Benim gerçek örneğimde tek bir test var, "1 çalışır, 2 onay" diyor. (BTW Test sırasında yöntemin gerçek stdout çıktısını, komut istemi daha okunabilir hale getirecek şekilde basabilir miyim?) – enahel