RSpec: блокирование Ядра:: сон?

Для не вложенных объектов:

Object.entries(o).map(x=>x.join(":")).join("\r\n")
38
задан Readonly 22 July 2009 в 23:40
поделиться

4 ответа

Если вы вызываете засыпание в контексте объекта, вы должны заглушить его для объекта, например:

class Foo
  def self.some_method
    sleep 5
  end
end

it "should call sleep" do
  Foo.stub!(:sleep)
  Foo.should_receive(:sleep).with(5)
  Foo.some_method
end

Ключ в том, чтобы заглушить сон для любого "я", в котором находится контекст, в котором вызывается сон.

47
ответ дан 27 November 2019 в 03:31
поделиться

Если вы используете Mocha , то будет работать что-то вроде этого:

def setup
  Kernel.stubs(:sleep)
end

def test_my_sleepy_method
  my_object.take_cat_nap!
  Kernel.assert_received(:sleep).with(1800) #should take a half-hour paower-nap
end

Или, если вы используете rr :

def setup
  stub(Kernel).sleep
end

def test_my_sleepy_method
  my_object.take_cat_nap!
  assert_received(Kernel) { |k| k.sleep(1800) }
end

Вам , вероятно, не следует тестировать более сложные проблемы потоковой передачи с помощью модульных тестов. Однако в интеграционных тестах используйте настоящий Kernel.sleep , который поможет вам выявить сложные проблемы с потоками.

3
ответ дан 27 November 2019 в 03:31
поделиться

В чистом rspec:

before do
  Kernel.stub!(:sleep)
end

it "should sleep" do
  Kernel.should_receive(:sleep).with(100)
  Object.method_to_test #We need to call our method to see that it is called
end
4
ответ дан 27 November 2019 в 03:31
поделиться

Мне нужно было установить заглушку, и после долгих поисков я обнаружил, что единственный способ, который сработал для меня, - это

def method_using_sleep
  sleep
  sleep 0.01
end

it "should use sleep" do
  @expectations = mock('expectations')
  @expectations.should_receive(:sleep).ordered.with()
  @expectations.should_receive(:sleep).ordered.with(0.01)

  def sleep(*args)
    @expectations.sleep(*args)
  end

  method_using_sleep
end
0
ответ дан 27 November 2019 в 03:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: