it-swarm.dev

Jak skonfigurować MiniTest?

Jestem dość początkującym testerem, ale starałem się być lepszy w TDD in Rails.

RSpec działa świetnie, ale moje testy są dość powolne. Słyszałem, że MiniTest jest dużo szybszy, a DSL MiniTest/Spec wygląda całkiem podobnie do tego, jak przywykłem do pracy z RSpec, więc pomyślałem, że spróbuję.

Nie udało mi się jednak znaleźć niczego w sieci, który zawiera wskazówki, jak skonfigurować i uruchomić program Minitest. Nauczyłem się testować z książki RSpec i nie mam pojęcia, jak mają działać Test :: Unit lub MiniTest. Mam klejnot w moim pliku gem, napisałem kilka prostych testów, ale nie mam pojęcia, gdzie je umieścić lub jak je uruchomić. Myślę, że to jedna z tych rzeczy, które są tak oczywiste, że nikt nie zadał sobie trudu, żeby to zapisać ...

Czy ktoś może mi wyjaśnić, jak skonfigurować niektóre pliki Minitest/spec i uruchomić je, aby móc porównać wydajność z Rspec?

EDYTOWAĆ

W szczególności są to podstawy, które najbardziej muszę wiedzieć:

  1. Potrzebujesz pliku test_helper (np. Spec_helper), a jeśli tak, to jak go utworzyć?
  2. Jak przebiegasz z minitestem? Wydaje się, że nie ma odpowiednika rspec spec lub rspec path/to/file_spec.rb, czego mi brakuje?

Dzięki!

47
Andrew

To pytanie jest podobne do Jak uruchomić wszystkie testy z minitestem?

Używając Ruby 1.9.3 i Rake 0.9.2.2, mając taki układ katalogu:

Rakefile
lib/alpha.rb
spec/alpha_spec.rb

Oto, jak może wyglądać alpha_spec.rb:

require 'minitest/spec'
require 'minitest/autorun'  # arranges for minitest to run (in an exit handler, so it runs last)

require 'alpha'

describe 'Alpha' do
  it 'greets you by name' do
    Alpha.new.greet('Alice').must_equal('hello, Alice')
  end
end

A oto Rakefile

require 'rake'
require 'rake/testtask'

Rake::TestTask.new do |t|
  t.pattern = 'spec/**/*_spec.rb'
end

Możesz biegać

  • wszystkie testy: rake test
  • jeden test: Ruby -Ilib spec/alpha_spec.rb

Nie wiem, czy używanie spec_helper.rb z minitestem jest powszechne czy nie. Nie ma wygodnej metody ładowania. Dodaj to do Rakefile:

require 'rake'
require 'rake/testtask'

Rake::TestTask.new do |t|
  t.pattern = 'spec/**/*_spec.rb'
  t.libs.Push 'spec'
end

Następnie spec/spec_helper.rb może zawierać różne zbędne rzeczy:

require 'minitest/spec'
require 'minitest/autorun'
require 'alpha'

A spec/alpha_spec.rb zastępuje zbędne części:

require 'spec_helper'
  • wszystkie testy: rake test
  • jeden test: Ruby -Ilib -Ispec spec/alpha_spec.rb
40
Patrick

Zauważ, że watchr lub spork nie są wymaganiami do przeprowadzania testów. Są wygodą do autotestowania. Ale najbardziej podstawowym sposobem uruchomienia zestawu testów MiniTest jest sam Ruby:

$ Ruby myfileoftests.rb
4
cczona

Jakiej wersji Ruby używasz?

W moim rozumieniu, 1.9 wprowadziło MiniTest, który całkowicie zastępuje Test::Unit, kompatybilnym wstecz API. Więc jeśli jesteś w wersji 1.9 i twoja aplikacja Rails odwołuje się do Test::Unit, to faktycznie używa ona już MiniTest.

Spójrz na swoje źródło Ruby - test/unit.rb na 1.9.2 ma następujące wymagania:

require 'minitest/unit'
require 'test/unit/assertions'
require 'test/unit/testcase'

A test/unit/assertions zawiera MiniTest::Assertions.


Szybsze uruchamianie testów to zupełnie inna ciemna sztuka. Spójrz na spork and watchr . Ta pierwsza utrzymuje Twoją aplikację w stanie inicjalizacji, ładuje zmodyfikowane pliki i rozwidla przed każdym uruchomieniem zestawu testowego. Ten ostatni obserwuje zmiany plików w repozytorium i automatycznie uruchamia powiązane z nimi przypadki testowe.

Razem dają Ci całkiem niezłą konfigurację TDD. Piszesz przypadek testowy dla nowego modelu, który automatycznie uruchamia się i kończy. Następnie za każdym razem, gdy zapisujesz powiązany model, testcase ponownie uruchamia się bardzo szybko. Otrzymujesz niemal natychmiastową informację zwrotną o tym, czy jesteś czerwony/zielony.

Oba są trochę trudne do skonfigurowania i dobrze się zachowują, więc sprawdź, czy masz więcej pytań, jeśli utkniesz.

Powodzenia!

4
nfm

Sprawdź to rozpoczęcie wideo dla minitest-Rails . Przechodzi przez proces konfiguracji aplikacji Minitest for a Rails.

http://www.youtube.com/watch?v=xA2f2zBNvsc

Przewodnik pokazuje, jak utworzyć plik pomocnika, a także jak uruchomić testy za pomocą zadania rake. Jeśli chcesz uruchomić określony test, możesz to zrobić za pomocą następujących elementów:

Ruby -Itest test/models/user_test.rb
3
blowmage

Oto moja cała zmienna rakefile, którą umieściłem w moim głównym katalogu:

task :default => :test
task :test do
  Dir.glob('./test/*_test.rb').each { |file| require file}
end

Aby uruchomić wszystkie moje pliki Minitest jednocześnie, po prostu wpisuję rake. To jest to!

Upewnij się, że masz require 'minitest/autorun' na początku każdego pliku Minitest. Dir.glob zdecydowanie działa z Minitest.

Aby uzyskać ładne, kolorowe wyjście Minitest, z nazwami wszystkich moich metod testowych, mam plik minitest_helper.rb w katalogu/test. (Musiał zainstalować minitest-reporterów klejnotów):

require 'minitest/reporters'
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
require 'minitest/autorun'

Po prostu musiałem require_relative './minitest_helper' na początku każdego z moich plików testowych.

1
Raymond Gan

Nowsze wersje RSpec (od wersji 2.8 wydanej w styczniu 2012 r.) Mają dramatyczny wzrost prędkości. Tutaj to badanie różnic wydajności i porównanie z MiniTest.

Ponadto znalazłem this screencast Ryana Batesa, doskonałe wprowadzenie do MiniTestu. Pamiętaj, że jest to jeden z filmów pro i musisz go subskrybować, aby go obejrzeć.

1
SnapShot

Patrick napisał naprawdę dobre wyjaśnienie i przykład. Dla przyszłych czytelników po prostu pamiętaj, że globalne oczekiwania są teraz deprecjonowane i zostaną usunięte w Minitest 6. Wymaga to niemal trywialnej zmiany w zawijaniu rzeczy testowanej w wywołaniu expect.

require 'minitest/spec'
require 'minitest/autorun'  # arranges for minitest to run (in an exit handler, so it runs last)

require 'alpha'

describe 'Alpha' do
  it 'greets you by name' do
    expect(Alpha.new.greet('Alice')).must_equal('hello, Alice')
  end
end
0
Chris McAnally