Ответ 1
it "should call 'bar' with appropriate arguments" do
expect(subject).to receive(:bar).with("an argument I want")
subject.foo
end
При написании тестов RSpec я нахожу, что пишу много кода, который выглядит так, чтобы гарантировать, что метод был вызван во время выполнения теста (ради аргумента, позвольте сказать, что я не могу опросить состояние объекта после вызова, потому что операция, которую выполняет метод, не просто увидеть эффект).
describe "#foo"
it "should call 'bar' with appropriate arguments" do
called_bar = false
subject.stub(:bar).with("an argument I want") { called_bar = true }
subject.foo
expect(called_bar).to be_true
end
end
Я хочу знать: есть ли более синтаксис, чем этот? Неужели я пропустил какую-то фанкную RSpec-удивительность, которая снизила бы приведенный выше код до нескольких строк? should_receive
звучит так, будто он должен это делать, но, читая дальше, звучит так, как будто это не совсем то, что он делает.
it "should call 'bar' with appropriate arguments" do
expect(subject).to receive(:bar).with("an argument I want")
subject.foo
end
В новом rspec
expect
синтаксисе это будет:
expect(subject).to receive(:bar).with("an argument I want")
Ниже должно работать
describe "#foo"
it "should call 'bar' with appropriate arguments" do
subject.stub(:bar)
subject.foo
expect(subject).to have_received(:bar).with("Invalid number of arguments")
end
end
Документация: https://github.com/rspec/rspec-mocks#expecting-arguments