Migruję aplikację z 2.3.5 na 3.0 i o ile sama apka poszła gładko to testów za nic nie mogę przeskoczyć.
Chciałem przenieść 1 test jednostkowy, więc przeniosłem plik z testem oraz fixturesa - niestety kiedy odpalam rake test:units, dostaję takie cudo (tu juz z --trace):
** Invoke test:units (first_time)
** Invoke test:prepare (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:prepare
** Execute test:units
test/unit/changelog_test.rb:12:in `test': wrong number of arguments (1 for 2) (ArgumentError)
from test/unit/changelog_test.rb:12:in `<class:ChangelogTest>'
from test/unit/changelog_test.rb:4:in `<top (required)>'
from /home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `load'
from /home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `block in <main>'
from /home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `each'
from /home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `<main>'
rake aborted!
Command failed with status (1): [/home/mencio/.rvm/rubies/ruby-1.9.2-p0/bin...]
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:995:in `block in sh'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:1010:in `call'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:1010:in `sh'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:1094:in `sh'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:1029:in `ruby'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:1094:in `ruby'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/test_unit/testing.rake:26:in `block (2 levels) in define'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:1112:in `verbose'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/test_unit/testing.rake:11:in `block in define'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:636:in `block in execute'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:597:in `block in invoke_with_call_chain'
/home/mencio/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2029:in `block (2 levels) in top_level'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2029:in `block in top_level'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2001:in `block in run'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/bin/rake:31:in `<top (required)>'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/bin/rake:19:in `load'
/home/mencio/.rvm/gems/ruby-1.9.2-p0/bin/rake:19:in `<main>'
Sam testfile wygląda następująco:
[code]# coding: utf-8
require ‘test_helper’
class ChangelogTest < ActiveSupport::TestCase
fixtures :changelogs
def setup @valid_log = changelogs(:valid) @invalid_log = changelogs(:invalid)
end
test “log validity” do @valid_log.valid?
end
end[/code]
Jak widać, test jest w zasadzie “żaden” a mimo to się wywala …
Dodam tylko że jeśli test ma taką postać:
def test_log_validity
@valid_log.valid?
end
To wykonuje się bez problemu…
Spróbuj zajrzeć w kod Railsów. Nie mam ich pod ręką, więc nie bardzo mogę Ci podać konkretne ścieżki, ale poszukaj pliku definiującego klasę ActiveSupport::TestCase i zobacz czy jest tam gdzieś zdefiniowana metoda “test”.
Może komentarz lub sama nazwa parametru będzie jakąś wskazówką.
W razie czego możesz pewnie zdefiniować w swoim teście metodę test z jednym parametrem i w niej wywoływać ‘super()’ z dwoma.
[quote=Arsen7]Spróbuj zajrzeć w kod Railsów. Nie mam ich pod ręką, więc nie bardzo mogę Ci podać konkretne ścieżki, ale poszukaj pliku definiującego klasę ActiveSupport::TestCase i zobacz czy jest tam gdzieś zdefiniowana metoda “test”.
Może komentarz lub sama nazwa parametru będzie jakąś wskazówką.
W razie czego możesz pewnie zdefiniować w swoim teście metodę test z jednym parametrem i w niej wywoływać ‘super()’ z dwoma.[/quote]
Juz sie biore za grzebanie - tylko ze jesli wywołuje z dwoma to test sie nie wykonuje …
Co za ba… - bez JavaScriptu już się nie można dostać do [show source]. Bleh… :-([/quote]
Przeszedłem zarówno przez to jak i przez rzeczy które wskazuje netbeans. Niestety nie ma tam nic sensownego
Znalazlem:
def test(name, &block)
puts name
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
defined = instance_method(test_name) rescue false
raise "#{test_name} is already defined in #{self}" if defined
if block_given?
define_method(test_name, &block)
else
define_method(test_name) do
flunk "No implementation provided for #{name}"
end
end
end
Jednak nawet jak przerabiam to nie dziala. Wyglada na to ze Railsy nie widzą z jakiegos powodu ze wstawiam blok kodu. Zmienilem wersje rubiego na 1.9.2-rc1 ale dalej to samo.
Na nowym projekcie działa prawidłowo … co do test_helpera to mam jeden ten oryginalny
Aplikacje migrowałem w ten sposob, że po prostu stworzyłem nowy projekt, przeniosłem kontrolery, modele i całą reszte, zaś configi zostawiłem oryginalne (nowe)
Ja korzystałem z tego i problemów z testami nie miałem. Nadpisało mi chyba test_helper. Aczkolwiek pewien nie jestem
Z tym, że korzystałem z shouldy i test::unit.
Dawniej sobie tak includowałem helpery bazowe w których miałem metody dla kazdego pliku z modułu.
Teraz dostaje:
test/unit/helpers/sorting_helper_test.rb:1:in require': no such file to load -- test/unit/helpers/base_helper_test.rb (LoadError) from test/unit/helpers/sorting_helper_test.rb:1:in<top (required)>’
from /home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in load' from /home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:inblock in ’
from /home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in each' from /home/mencio/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in’