To add a collaborator to this project you will need to use the Relish gem to add the collaborator via a terminal command. Soon you'll be able to also add collaborators here!
More about adding a collaboratorstub a chain of methods
Use the stub_chain
method to stub a chain of two or more methods in one
statement. Method chains are considered a design smell, but it's not really
the method chain itself that is the problem - it's the dependency chain
represented by a chain of messages to different objects:
foo.get_bar.get_baz
This is a Law of Demeter violation if get_bar
returns an object other than
foo
, and get_baz
returns yet another object.
Fluent interfaces look similar from a caller's perspective, but don't
represent a dependency chain (the caller depends only on the object it is
calling). Consider this common example from Ruby on Rails:
Article.recent.by(current_user)
The recent
and by
methods return the same object, so this is not a Law of
Demeter violation.
- Scenarios
-
- stub a chain of methods
-
- Given
-
a file named "stub_chain_spec.rb" with:
describe "stubbing a chain of methods" do subject { Object.new } context "given symbols representing methods" do it "returns the correct value" do subject.stub_chain(:one, :two, :three).and_return(:four) subject.one.two.three.should eq(:four) end end context "given a hash at the end" do it "returns the correct value" do subject.stub_chain(:one, :two, :three => :four) subject.one.two.three.should eq(:four) end end context "given a string of methods separated by dots" do it "returns the correct value" do subject.stub_chain("one.two.three").and_return(:four) subject.one.two.three.should eq(:four) end end end
- When
-
I run
rspec stub_chain_spec.rb
- Then
- the examples should all pass
Last published over 7 years ago by .