Minitest / Mocha: проверка того, что значение изменяется несколько раз - PullRequest
0 голосов
/ 29 сентября 2018

Допустим, у меня есть класс обслуживания как таковой:

class FooService

  def self.execute(foo_id)
    Foo.find(foo_id).tap do |foo|
      foo.update_attribute :status, :working
      do_work(foo)
      foo.update_attribute :status, :done
    end
  end

end

Простой тест для этого метода в Minitest с Mocha:

test 'executing the service' do
  @foo = Foo.first

  FooService.expects(:do_work).with(@foo)

  FooService.execute(@foo.id)

  assert_equal :done, @foo.reload.status
end

Какой будет лучший способ проверитьчто атрибут status был установлен на :working?

Я пытался использовать Foo.any_instance.expects(:update_attribute).with(:status, :working), но, поскольку в Mocha нет способа вызвать исходную реализацию, это имеет плохие побочные эффекты.

1 Ответ

0 голосов
/ 30 сентября 2018

Одним из решений было бы получить do_work, чтобы вызвать ошибку.Это должно остановить процесс до конца процедуры и оставить foo в состоянии working

FooService.expects(:do_work).raises(Exception, 'foo')
assert_equal :working, @foo.reload.status
...