Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
219 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,12 @@ | ||
*.gem | ||
.bundle | ||
.rbx | ||
.ruby-gemset | ||
.ruby-version | ||
.rvmrc | ||
coverage/ | ||
gems.tags | ||
pkg/* | ||
tmp/* | ||
.rvmrc | ||
tags | ||
.rbx | ||
tags | ||
gems.tags | ||
tmp/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
Feature: minitest support | ||
|
||
minitest is supported by Bogus both with the classic assert-style syntax and the minitest/spec expectation syntax. | ||
|
||
Background: | ||
Given a file named "foo.rb" with: | ||
"""ruby | ||
class Library | ||
def self.books | ||
end | ||
def checkout(book) | ||
end | ||
def return_book(book) | ||
end | ||
end | ||
class BookIndex | ||
def self.by_author(author) | ||
Library.books.select{|book| book[:author] == author} | ||
end | ||
end | ||
class Student | ||
def initialize(library) | ||
@library = library | ||
end | ||
def study(*book_titles) | ||
book_titles.each do |book_title| | ||
@library.checkout(book_title) | ||
end | ||
end | ||
end | ||
""" | ||
|
||
Scenario: Auto-verification of unsatisfied mocks | ||
Then minitest file "foo_test.rb" with the following content should fail: | ||
"""ruby | ||
require 'minitest/autorun' | ||
require 'bogus/minitest' | ||
require_relative 'foo' | ||
class StudentTest < MiniTest::Unit::TestCase | ||
def test_library_checkouts | ||
library = fake(:library) | ||
student = Student.new(library) | ||
mock(library).checkout("Moby Dick") | ||
mock(library).checkout("Sherlock Holmes") | ||
student.study("Moby Dick") | ||
end | ||
end | ||
""" | ||
|
||
Scenario: Spying on method calls with assert syntax | ||
Then minitest file "foo_test.rb" with the following content should pass: | ||
"""ruby | ||
require 'minitest/autorun' | ||
require 'bogus/minitest' | ||
require_relative 'foo' | ||
class StudentTest < MiniTest::Unit::TestCase | ||
def setup | ||
@library = fake(:library) | ||
end | ||
def test_library_checkouts | ||
student = Student.new(@library) | ||
student.study("Moby Dick", "Sherlock Holmes") | ||
assert_received @library, :checkout, ["Moby Dick"] | ||
assert_received @library, :checkout, ["Sherlock Holmes"] | ||
refute_received @library, :return_book, ["Moby Dick"] | ||
end | ||
end | ||
""" | ||
|
||
Scenario: Spying on method calls with expectation syntax | ||
Then minitest file "foo_spec.rb" with the following content should pass: | ||
"""ruby | ||
require 'minitest/autorun' | ||
require 'bogus/minitest/spec' | ||
require_relative 'foo' | ||
describe Student do | ||
describe "#study" do | ||
fake(:library) | ||
it "studies using books from library" do | ||
student = Student.new(library) | ||
student.study("Moby Dick", "Sherlock Holmes") | ||
library.must_have_received :checkout, ["Moby Dick"] | ||
library.must_have_received :checkout, ["Sherlock Holmes"] | ||
library.wont_have_received :return_book, ["Moby Dick"] | ||
end | ||
end | ||
end | ||
""" | ||
|
||
Scenario: Describe-level class faking | ||
Then minitest file "foo_spec.rb" with the following content should pass: | ||
"""ruby | ||
require 'minitest/autorun' | ||
require 'bogus/minitest/spec' | ||
require_relative 'foo' | ||
describe BookIndex do | ||
fake_class(Library, books: []) | ||
it "returns books written by author" do | ||
BookIndex.by_author("Mark Twain").must_equal [] | ||
end | ||
end | ||
""" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
gem 'minitest', '>= 4.7' | ||
require 'bogus' | ||
|
||
module MiniTest::Assertions | ||
def assert_received(subject, method, args, message = nil) | ||
with_bogus_matcher_for(subject, method, args) do |matcher, result| | ||
assert(result, message || matcher.failure_message_for_should) | ||
end | ||
end | ||
|
||
def refute_received(subject, method, args, message = nil) | ||
with_bogus_matcher_for(subject, method, args) do |matcher, result| | ||
refute(result, message || matcher.failure_message_for_should_not) | ||
end | ||
end | ||
|
||
private | ||
|
||
def with_bogus_matcher_for(subject, method, args) | ||
matcher = Bogus.have_received.__send__(method, *args) | ||
result = matcher.matches?(subject) | ||
yield matcher, result | ||
end | ||
end | ||
|
||
module Bogus::Minitest | ||
include Bogus::MockingDSL | ||
|
||
def before_setup | ||
super | ||
Bogus.clear | ||
end | ||
|
||
def after_teardown | ||
Bogus.ensure_all_expectations_satisfied! | ||
super | ||
end | ||
end | ||
|
||
class Minitest::Test | ||
include Bogus::Minitest | ||
end if defined? Minitest::Test | ||
|
||
class MiniTest::Unit::TestCase | ||
include Bogus::Minitest | ||
end if defined? MiniTest::Unit::TestCase |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
require 'bogus/minitest' | ||
|
||
module MiniTest::Expectations | ||
infect_an_assertion :assert_received, :must_have_received, true | ||
infect_an_assertion :refute_received, :wont_have_received, true | ||
end | ||
|
||
class MiniTest::Spec | ||
module DSL | ||
def fake(name, opts = {}, &block) | ||
let(name) { fake(name, opts, &block) } | ||
end | ||
|
||
def fake_class(name, opts = {}) | ||
before { fake_class(name, opts) } | ||
end | ||
end | ||
end |