обратная трассировка rspec, но нет ошибки с @ model.destroy для модели activerecord - PullRequest
2 голосов
/ 24 февраля 2011

Я пытаюсь выполнить тест rspec, где пример выглядит так:

it "cannot be deleted if it has children" do
  children = generate_children
  children.each do |child|
    child.parent = @subj
    @subj.save
    child.save
    @subj.destroy.should be_false
    @subj.should have(1).error
   end
end

Я получаю это в след:

/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-expectations-2.5.0/lib/rspec/expectations/fail_with.rb:29:in `fail_with'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-expectations-2.5.0/lib/rspec/expectations/handler.rb:21:in `handle_matcher'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-expectations-2.5.0/lib/rspec/expectations/extensions/kernel.rb:27:in `should'
./spec/models/my_examples.rb:14
./spec/models/my_examples.rb:10:in `each'
./spec/models/my_examples.rb:10
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:49:in `instance_eval'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:49:in `run'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:106:in `with_around_hooks'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:46:in `run'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:99:in `with_pending_capture'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:98:in `catch'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:98:in `with_pending_capture'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:45:in `run'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/example_group.rb:262:in `run_examples'
/opt/tms/bin/jruby-1.5.1/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/example_group.rb:258:in `map'

Но испытание проходит, хотя с уродливым обратным следом, показанным выше. Любая идея, как я мог бы переписать этот тест / я делаю что-то здесь не так?

1 Ответ

1 голос
/ 22 марта 2011

line14 - это линия уничтожения, что интересно.

Согласно исходному коду, destroy не возвращает true / false - он возвращает тот же элемент (через freeze).

Я не думаю, что вы должны проверить, было ли это "правда".Вероятно, сбой, потому что замороженная Active Record не ложная ... но это довольно странная вещь для сравнения.

Не уверен, как вы будете проверять ее ... возможно, с эквивалентом

lambda do @subj.destroy end.should_not change(Subject, :count).by(-1)
...