If you expect method calls in RSpec 3, be aware that the argument matchers use very liberal equality rules (more like ===
instead of ==
).
For example:
expect(subject).to receive(:foo).with(MyClass)
subject.foo(MyClass) # satisfies the expectation
subject.foo(MyClass.new) # also satisfies the expectation
expect(subject).to receive(:bar).with(/regex/)
subject.bar(/regex/) # satisfies the expectation
subject.bar('regex') # also satisfies the expectation
This is usually not an issue, except when your method arguments are things like classes, regexps or ranges.
If you want to expect strict equality, you could use
expect(subject).to receive(:foo).with(eq(MyClass))
or
expect(subject).to receive(:foo) do |klass|
expect(klass).to eq MyClass
end
Posted by Tobias Kraze to makandra dev (2016-02-17 13:34)