这个 rspec expect 块在做什么?
What is this rspec expect block doing?
我正在尝试找出一些 Rspec 代码
我们有双人间:
let(:store_service) { double(StoreService) }
然后在 it
块内:
expect(store_service).to receive(:run) do
{ error: 'The storeman did not sign up for this.' }
end
这个块在这种情况下做什么?
有时 allow
和 expect
关键字会混淆。
rubocop-rspec 可以帮助您避免这种情况。
有关如何引发和预期错误的详细信息,请参阅 raising-an-error and raise-error-matcher 文档。
示例单元测试可能如下所示:
describe StoreService do
context "when storeman did not sign up" do
subject { StoreService.new(sign_up: nil).run }
it "raises an error" do
expect { subject.run }.to raise_error("The storeman did not sign up for this.")
end
end
end
集成测试示例可能如下所示:
class Caller
def run
store_service = build_store_service
store_service.run
rescue RuntimeError => e
handle_error(e)
end
def handle_error(e)
...
end
def build_store_service
...
end
end
describe Caller do
describe "run" do
context "when storeman did not sign up" do
subject(:caller) { described_class.new }
let(:store_service) { double(StoreService) }
let(:error_msg) { "The storeman did not sign up for this." }
before do
allow(store_service).to receive(:run).and_raise(error_msg)
allow_any_instance_of(Caller).to receive(:build_store_service).and_return(store_service)
end
it "calls run" do
expect(caller).to receive(:handle_error)
caller.run
end
end
end
end
我正在尝试找出一些 Rspec 代码
我们有双人间:
let(:store_service) { double(StoreService) }
然后在 it
块内:
expect(store_service).to receive(:run) do
{ error: 'The storeman did not sign up for this.' }
end
这个块在这种情况下做什么?
有时 allow
和 expect
关键字会混淆。
rubocop-rspec 可以帮助您避免这种情况。
有关如何引发和预期错误的详细信息,请参阅 raising-an-error and raise-error-matcher 文档。
示例单元测试可能如下所示:
describe StoreService do
context "when storeman did not sign up" do
subject { StoreService.new(sign_up: nil).run }
it "raises an error" do
expect { subject.run }.to raise_error("The storeman did not sign up for this.")
end
end
end
集成测试示例可能如下所示:
class Caller
def run
store_service = build_store_service
store_service.run
rescue RuntimeError => e
handle_error(e)
end
def handle_error(e)
...
end
def build_store_service
...
end
end
describe Caller do
describe "run" do
context "when storeman did not sign up" do
subject(:caller) { described_class.new }
let(:store_service) { double(StoreService) }
let(:error_msg) { "The storeman did not sign up for this." }
before do
allow(store_service).to receive(:run).and_raise(error_msg)
allow_any_instance_of(Caller).to receive(:build_store_service).and_return(store_service)
end
it "calls run" do
expect(caller).to receive(:handle_error)
caller.run
end
end
end
end