如何执行一次并期望使用 RSpec 进行多次更改?

Ale*_*pov 0 ruby testing rspec rspec-expectations

如果我想测试一个操作会产生某些副作用,我如何执行一次操作并使用changerspec 匹配器。例子:

expect { some_method }.to change(Foo, :count).by(1)
expect { some_method }.to change(Bar, :count).by(1)
expect { some_method }.to change(Baz, :count).by(1)
Run Code Online (Sandbox Code Playgroud)

我该如何执行 some_method只一次,而不是 3 次?

或者我需要做类似的事情:

foo_count_before = Foo.count
bar_count_before = Bar.count
baz_count_before = Baz.count

some_method

foo_count_after= Foo.count
bar_count_after= Bar.count
baz_count_after= Baz.count

expect(foo_count_after - foo_count_before).to eq 1
expect(bar_count_after - bar_count_before).to eq 1
expect(baz_count_after - baz_count_before).to eq 1
Run Code Online (Sandbox Code Playgroud)

Hol*_*ust 5

您可以使用复合期望将多个期望连接在一起。在您的示例中,这可能如下所示:

expect { some_method }
  .to change(Foo, :count).by(1)
  .and change(Bar, :count).by(1)
  .and change(Baz, :count).by(1)
Run Code Online (Sandbox Code Playgroud)