1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
Feature: Safe stubbing
Most Ruby test double libraries let you stub methods that don't exist. Bogus is different in this respect: not only does it not allow stubbing methods that don't exist, it also ensures that the number of arguments you pass to those methods matches the method definition.
The stubbing syntax is:
stub(object).method_name(arg1, arg2, ...) { return_value }
Background:
Given a file named "library.rb" with:
"""ruby
class Library
def checkout(book)
end
end
"""
Scenario: Stubbing methods that exist on real object
Then spec file with following content should pass:
"""ruby
require_relative 'library'
describe Library do
it "does something" do
library = Library.new
stub(library).checkout("some book") { :checked_out }
expect(library.checkout("some book")).to eq(:checked_out)
end
end
"""
Scenario: Stubbing methods that do not exist on real object
Then spec file with following content should fail:
"""ruby
require_relative 'library'
describe Library do
it "does something" do
library = Library.new
stub(library).buy("some book") { :bought }
end
end
"""
Scenario: Stubbing methods with wrong number of arguments
Then spec file with following content should fail:
"""ruby
require_relative 'library'
describe Library do
it "does something" do
library = Library.new
stub(library).checkout("some book", "another book") { :bought }
end
end
"""
Scenario: Stubs allow the methods to be called
Then spec file with following content should pass:
"""ruby
require_relative 'library'
describe Library do
it "does something" do
library = Library.new
stub(library).checkout("some book") { :bought }
end
end
"""
Scenario: Stubbing methods multiple times
Then spec file with following content should fail:
"""ruby
require_relative 'library'
describe Library do
it "stubbing with too many arguments" do
library = Library.new
stub(library).checkout("some book") { :bought }
stub(library).checkout("book", "and one argument too many") { :whatever }
end
end
"""
|