Logo: Relish

  1. Sign in

Project: Bogus 0.1.6

Argument matchers

Bogus supports some argument matchers for use, when you don't really care about exact equality of arguments passed in or spied on.

Background
Given
a file named "catalog.rb" with:
class Catalog
  def self.books_by_author_and_title(author, title)
  end
end
Scenarios
Stubbing methods with any arguments
Then
the following test should pass:
require_relative 'catalog'

stub(Catalog).books_by_author_and_title(any_args) { :some_book }

expect(Catalog.books_by_author_and_title("Arthur Conan Doyle", "Sherlock Holmes")).to eq(:some_book)
Stubbing methods with some wildcard arguments
Then
the following test should pass:
require_relative 'catalog'

stub(Catalog).books_by_author_and_title(any_args) { :some_book }
stub(Catalog).books_by_author_and_title("Mark Twain", anything) { :twains_book }

expect(Catalog.books_by_author_and_title("Mark Twain", "Tom Sawyer")).to eq(:twains_book)
expect(Catalog.books_by_author_and_title("Mark Twain", "Huckleberry Finn")).to eq(:twains_book)
expect(Catalog.books_by_author_and_title("Arthur Conan Doyle", "Sherlock Holmes")).to eq(:some_book)
Stubbing methods with proc arguments matcher
Then
the following test should pass:
require_relative 'catalog'

stub(Catalog).books_by_author_and_title(any_args) { :some_book }
stub(Catalog).books_by_author_and_title(with{|author| author =~ /Twain/ }) { :twains_book }

expect(Catalog.books_by_author_and_title("Mark Twain", "Tom Sawyer")).to eq(:twains_book)
expect(Catalog.books_by_author_and_title("M. Twain", "Huckleberry Finn")).to eq(:twains_book)
expect(Catalog.books_by_author_and_title("Arthur Conan Doyle", "Sherlock Holmes")).to eq(:some_book)
Stubbing methods with proc argument matcher
Then
the following test should pass:
require_relative 'catalog'

stub(Catalog).books_by_author_and_title(any_args) { :some_book }
stub(Catalog).books_by_author_and_title(matches{|author| author =~ /Twain/ }, "Tom Sawyer") { :twains_book }

expect(Catalog.books_by_author_and_title("Mark Twain", "Tom Sawyer")).to eq(:twains_book)
expect(Catalog.books_by_author_and_title("M. Twain", "Huckleberry Finn")).to eq(:some_book)
expect(Catalog.books_by_author_and_title("Arthur Conan Doyle", "Sherlock Holmes")).to eq(:some_book)
Stubbing methods with argument type matcher
Then
the following test should pass:
require_relative 'catalog'

stub(Catalog).books_by_author_and_title(any_args) { :some_book }
stub(Catalog).books_by_author_and_title(any(String), any(String)) { :twains_book }

expect(Catalog.books_by_author_and_title("Mark Twain", "Tom Sawyer")).to eq(:twains_book)
expect(Catalog.books_by_author_and_title("M. Twain", :other_book)).to eq(:some_book)

Last published over 3 years ago by Adam Pohorecki.