Próbuję przetestować logikę, która działa podczas dziedziczenia klasy, ale napotkałem problem podczas uruchamiania wielu asercji.Jak przetestować dziedziczenie ruby za pomocą rspec
raz pierwszy spróbował ...
describe 'self.inherited' do
before do
class Foo
def self.inherited klass; end
end
Foo.stub(:inherited)
class Bar < Foo; end
end
it 'should call self.inherited' do
# this fails if it doesn't run first
expect(Foo).to have_received(:inherited).with Bar
end
it 'should do something else' do
expect(true).to eq true
end
end
ale to się nie powiedzie, ponieważ klasa Bar został już załadowany, a zatem nie wywołuje inherited
2nd czasu. Jeśli asercja nie zostanie uruchomiona jako pierwsza ... nie powiedzie się.
Więc próbowałem coś takiego ...
describe 'self.inherited once' do
before do
class Foo
def self.inherited klass; end
end
Foo.stub(:inherited)
class Bar < Foo; end
end
it 'should call self.inherited' do
@tested ||= false
unless @tested
expect(Foo).to have_receive(:inherited).with Bar
@tested = true
end
end
it 'should do something else' do
expect(true).to eq true
end
end
@tested
ponieważ nie utrzymują się od testu do badania, badanie nie wystarczy uruchomić tylko raz.
ktoś ma jakieś sprytne sposoby, aby to osiągnąć? Jest to wymyślony przykład i dont faktycznie trzeba przetestować rubin się;)
przetestować zachowanie, a nie realizacja. Testowanie, czy klasa dziedziczy z klasy come, byłoby uzasadnione tylko wtedy, gdy metoda wykonuje meta-programowania (jak konstruowanie klasy i ustawia przodków) –