Я знаю, что это - что-то вроде старого вопроса, но я искал решение для этого, которое не потребовало, чтобы код бизнеса изменения сделал тесты легче, и я думаю, что предложил решение.
Даже если вы используете Рельсы, необходимо добавить драгоценный камень "мини-тест"
к вашему Gemfile
, то добавляют , требуют "мини-теста/насмешки"
к вашему test_helper.rb
.
it "calls Foo.bar" do
bar_is_called = false
bar_lambda = ->{
bar_is_called = true
}
Foo.stub(:bar, bar_lambda) do
Alpha.new.process
end
bar_is_called.must_equal true
end
.stub
can be passed a return value, or when passed something that responds to .call
, it calls .call
on it (Docs for the stub method). In this example. bar_lambda
is called, changing the value of bar_is_called
. This verifies that Foo.bar
was called.
Это также работает так же в испытательном синтаксисе:
test 'Foo.bar is called' do
bar_is_called = false
bar_lambda = ->{
bar_is_called = true
}
Foo.stub(:bar, bar_lambda) do
Alpha.new.process
end
assert bar_is_called
end