@markbates
Friday, October 4, 13
good morning
bonjour
goedemorgen
Friday, October 4, 13
after last night...
Friday, October 4, 13
a change of topic...
Friday, October 4, 13
watch mark sleep...
Friday, October 4, 13
isn’t this nice?
Friday, October 4, 13
do not disturb
Friday, October 4, 13
shh...
Friday, October 4, 13
fine, i’ll get up!
Friday, October 4, 13
@markbates
Friday, October 4, 13
hire me*(consulting only)
Friday, October 4, 13
Friday, October 4, 13
Friday, October 4, 13
Friday, October 4, 13
PIRATE13
www.metacasts.tv
Friday, October 4, 13
Friday, October 4, 13
A
Friday, October 4, 13
BIGFriday, October 4, 13
look at
Friday, October 4, 13
MiniTest
Friday, October 4, 13
Friday, October 4, 13
Friday, October 4, 13
#	
  Running	
  tests:
	
  
...........................................
	
  
Finished	
  tests	
  in	
  1.851323s,	
  1.60...
Step 1:
Setup Testing Framework
Friday, October 4, 13
Friday, October 4, 13
Friday, October 4, 13
Friday, October 4, 13
Friday, October 4, 13
• RSpec
• MiniTest
• test-unit
• Bacon
• Riot
• Wrong
• Shindo
• testrocket
• rubydoctest
• Testy
• Micronaut
• Kintama
• ...
MiniTest
Friday, October 4, 13
Good Things Come in Small Packages
Friday, October 4, 13
Friday, October 4, 13
Friday, October 4, 13
Friday, October 4, 13
Friday, October 4, 13
require	
  'minitest/autorun'
	
  
class	
  Foo
	
  	
  def	
  add(x,	
  y)
	
  	
  	
  	
  x	
  +	
  y
	
  	
  end
end
	
...
require	
  'minitest/autorun'
	
  
class	
  Foo
	
  	
  def	
  add(x,	
  y)
	
  	
  	
  	
  x	
  +	
  y
	
  	
  end
end
	
...
Friday, October 4, 13
IT SHIPS WITH
RUBY!!!
Friday, October 4, 13
>= 1.9
Friday, October 4, 13
also available as a gem
Friday, October 4, 13
Familiar Syntax to RSpec or Test::Unit
Friday, October 4, 13
MiniTest replaced Test::Unit in 1.9
Friday, October 4, 13
The Basics
Friday, October 4, 13
MiniTest::Spec
Friday, October 4, 13
describe	
  Something	
  do
	
  
	
  	
  
	
  	
  	
  	
  
	
  
end
Friday, October 4, 13
describe	
  Something	
  do
	
  
	
  	
  it	
  "does	
  something"	
  do	
  
	
  	
  	
  	
  #	
  tests	
  go	
  here
	
  ...
describe	
  Something	
  do
	
  
	
  	
  before	
  do	
  
	
  	
  	
  	
  #	
  setup	
  code	
  goes	
  here
	
  	
  end
	...
describe	
  Something	
  do
	
  
	
  	
  describe	
  'something	
  else'	
  do
	
  
	
  	
  	
  	
  it	
  "does	
  somethi...
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  descri...
describe	
  Something	
  do
	
  
	
  	
  subject	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  describe	
  's...
describe	
  Something	
  do
	
  
	
  	
  subject	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  context	
  'so...
scrap.rb:19:in	
  `block	
  in	
  <main>':	
  undefined	
  method	
  `context'	
  for	
  #<Class:
0x007fce92074b40>	
  (No...
class	
  MiniTest::Spec
	
  
	
  
	
  	
  	
  
	
  
end
Friday, October 4, 13
class	
  MiniTest::Spec
	
  
	
  	
  class	
  <<	
  self
	
  	
  	
  	
  alias	
  :context	
  :describe
	
  	
  end
	
  
e...
Pending
Friday, October 4, 13
describe	
  Something	
  do
	
  
	
  	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
end
Friday, October 4, 13
describe	
  Something	
  do
	
  
	
  	
  it	
  'does	
  something'
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
end
Friday...
describe	
  Something	
  do
	
  
	
  	
  it	
  'does	
  something'
	
  
	
  	
  it	
  'does	
  something	
  else'	
  do
	
...
describe	
  Something	
  do
	
  
	
  	
  it	
  'does	
  something'
	
  
	
  	
  it	
  'does	
  something	
  else'	
  do
	
...
#	
  Running	
  tests:
	
  
SSS
	
  
Finished	
  tests	
  in	
  0.000912s,	
  3289.4737	
  tests/s,	
  
0.0000	
  assertio...
Expectations
Friday, October 4, 13
• must_be
• must_be_close_to
• must_be_empty
• must_be_instance_of
• must_be_kind_of
• must_be_nil
• must_be_same_as
• mus...
• wont_be
• wont_be_close_to
• wont_be_empty
• wont_be_instance_of
• wont_be_kind_of
• wont_be_nil
• wont_be_same_as
• won...
describe	
  Something	
  do
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  lambda	
  {nil	
  /	
  2}.must_ra...
MiniTest::Unit
Friday, October 4, 13
class	
  TestSomething	
  <	
  MiniTest::Unit::TestCase
	
  
	
  
	
  
	
  
	
  
end
Friday, October 4, 13
class	
  TestSomething	
  <	
  MiniTest::Unit::TestCase
	
  
	
  	
  def	
  test_something
	
  	
  	
  	
  #tests	
  go	
 ...
class	
  TestSomething	
  <	
  MiniTest::Unit::TestCase
	
  
	
  	
  def	
  setup
	
  	
  	
  	
  #	
  setup	
  code	
  go...
class	
  TestSomething	
  <	
  MiniTest::Unit::TestCase
	
  
	
  	
  def	
  test_something
	
  	
  	
  	
  assert	
  true
...
class	
  TestSomething	
  <	
  MiniTest::Unit::TestCase
	
  
	
  	
  def	
  test_something
	
  	
  	
  	
  assert	
  true
...
No let
Friday, October 4, 13
No subject
Friday, October 4, 13
Pending
Friday, October 4, 13
class	
  SomethingTest	
  <	
  MiniTest::Unit::TestCase
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
end
Friday, October 4...
class	
  SomethingTest	
  <	
  MiniTest::Unit::TestCase
	
  
	
  	
  def	
  test_something
	
  	
  	
  	
  skip
	
  	
  en...
class	
  SomethingTest	
  <	
  MiniTest::Unit::TestCase
	
  
	
  	
  def	
  test_something
	
  	
  	
  	
  skip
	
  	
  en...
#	
  Running	
  tests:
	
  
SS
	
  
Finished	
  tests	
  in	
  0.000663s,	
  3016.5913	
  tests/s,	
  
0.0000	
  assertion...
Assertions
Friday, October 4, 13
• assert
• assert_block
• assert_empty
• assert_equal
• assert_in_delta
• assert_in_epsilon
• assert_includes
• assert_ins...
• refute
• refute_block
• refute_empty
• refute_equal
• refute_in_delta
• refute_in_epsilon
• refute_includes
• refute_ins...
Mocking/Stubbing
Friday, October 4, 13
Very Basic
Friday, October 4, 13
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  MiniTest::Mock.new	
  }
	
  
	
  	
  it	
  "does	
  somet...
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  MiniTest::Mock.new	
  }
	
  
	
  	
  it	
  "does	
  somet...
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  MiniTest::Mock.new	
  }
	
  
	
  	
  it	
  "does	
  somet...
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  MiniTest::Mock.new	
  }
	
  
	
  	
  it	
  "does	
  somet...
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  MiniTest::Mock.new	
  }
	
  
	
  	
  it	
  "does	
  somet...
#	
  Running	
  tests:
	
  
E
	
  
Finished	
  tests	
  in	
  0.000858s,	
  1165.5012	
  tests/s,	
  0.0000	
  
assertions...
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  it	
  ...
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  it	
  ...
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  it	
  ...
Struct, OpenStruct
Friday, October 4, 13
describe	
  "Something"	
  do
	
  
	
  	
  let(:something)	
  {	
  OpenStruct.new(name:	
  'Widget')	
  }
	
  
	
  	
  it	...
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  it	
  ...
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  it	
  ...
Mocha, RR, FlexMock
Friday, October 4, 13
Custom
Assertions
Friday, October 4, 13
describe	
  Something	
  do
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  1.2.must_round_to	
  1
	
  	
  	
...
module	
  MiniTest::Assertions
	
  
	
  	
  
	
  	
  
	
  
	
  
	
  
	
  
	
  
	
  
end
	
  
Friday, October 4, 13
module	
  MiniTest::Assertions
	
  
	
  	
  def	
  assert_equals_rounded(rounded,	
  decimal)
	
  
	
  	
  end
	
  
	
  	
...
module	
  MiniTest::Assertions
	
  
	
  	
  def	
  assert_equals_rounded(rounded,	
  decimal)
	
  	
  	
  	
  assert	
  ro...
module	
  MiniTest::Assertions
	
  
	
  	
  def	
  assert_equals_rounded(rounded,	
  decimal)
	
  	
  	
  	
  assert	
  ro...
module	
  MiniTest::Assertions
	
  
	
  	
  def	
  assert_equals_rounded(rounded,	
  decimal)
	
  	
  	
  	
  assert	
  ro...
module	
  MiniTest::Assertions
	
  
	
  	
  def	
  assert_equals_rounded(rounded,	
  decimal)
	
  	
  	
  	
  assert	
  ro...
describe	
  Something	
  do
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  1.2.must_round_to	
  1
	
  	
  	
...
Rails
Friday, October 4, 13
gem “minitest-rails”
Friday, October 4, 13
ENV["RAILS_ENV"]	
  =	
  "test"
require	
  File.expand_path("../../config/environment",	
  __FILE__)
require	
  "rails/tes...
ENV["RAILS_ENV"]	
  =	
  "test"
require	
  File.expand_path("../../config/environment",	
  __FILE__)
require	
  "rails/tes...
ENV["RAILS_ENV"]	
  =	
  "test"
require	
  File.expand_path("../../config/environment",	
  __FILE__)
require	
  "rails/tes...
rake	
  minitest	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  Run	
  default	
  tests
rake	
  minitest:...
task	
  :mt	
  =>	
  'minitest:all:quick'
Rake::Task["default"].clear
task	
  :default	
  =>	
  :mt
Friday, October 4, 13
ruby	
  -­‐I	
  test	
  test/models/user_test.rb
Friday, October 4, 13
describe	
  FeedController	
  do
	
  
	
  	
  describe	
  '#index'	
  do
	
  
	
  	
  	
  	
  it	
  'renders	
  an	
  atom...
gem “guard-minitest”
Friday, October 4, 13
guard	
  :minitest	
  do
	
  	
  watch(%r|^app/controllers/(.*).rb|)	
  {	
  |m|	
  "test/controllers/#{m[1]}_test.rb"	
  ...
gem “m”
Friday, October 4, 13
m	
  test/models/user_test.rb:37
Friday, October 4, 13
gem “minitest-rails-capybara”
Friday, October 4, 13
feature	
  "Can	
  Access	
  Home"	
  do
	
  
	
  	
  scenario	
  "has	
  content"	
  do
	
  	
  	
  	
  visit	
  root_pat...
Wrapping Up
Friday, October 4, 13
familiar syntax
Friday, October 4, 13
95% of RSpec
Friday, October 4, 13
lightweight
Friday, October 4, 13
rspec	
  (2.14.1)
	
  	
  rspec-­‐core	
  (~>	
  2.14.0)
	
  	
  rspec-­‐expectations	
  (~>	
  2.14.0)
	
  	
  rspec-­‐mo...
Ships with Ruby!
Friday, October 4, 13
• https://github.com/seattlerb/minitest
• http://www.mattsears.com/articles/2011/12/10/minitest-quick-reference
• http://b...
Thanks!
@markbates
www.metacasts.tv
Friday, October 4, 13
Upcoming SlideShare
Loading in …5
×

A Big Look at MiniTest

1,135 views
1,081 views

Published on

Presented at ArrrrCamp.be on October 4th, 2013

Published in: Technology, Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,135
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

A Big Look at MiniTest

  1. 1. @markbates Friday, October 4, 13
  2. 2. good morning bonjour goedemorgen Friday, October 4, 13
  3. 3. after last night... Friday, October 4, 13
  4. 4. a change of topic... Friday, October 4, 13
  5. 5. watch mark sleep... Friday, October 4, 13
  6. 6. isn’t this nice? Friday, October 4, 13
  7. 7. do not disturb Friday, October 4, 13
  8. 8. shh... Friday, October 4, 13
  9. 9. fine, i’ll get up! Friday, October 4, 13
  10. 10. @markbates Friday, October 4, 13
  11. 11. hire me*(consulting only) Friday, October 4, 13
  12. 12. Friday, October 4, 13
  13. 13. Friday, October 4, 13
  14. 14. Friday, October 4, 13
  15. 15. PIRATE13 www.metacasts.tv Friday, October 4, 13
  16. 16. Friday, October 4, 13
  17. 17. A Friday, October 4, 13
  18. 18. BIGFriday, October 4, 13
  19. 19. look at Friday, October 4, 13
  20. 20. MiniTest Friday, October 4, 13
  21. 21. Friday, October 4, 13
  22. 22. Friday, October 4, 13
  23. 23. #  Running  tests:   ...........................................   Finished  tests  in  1.851323s,  1.6014  tests/s,  6.7781  assertions/s.   43  tests,  182  assertions,  0  failures,  0  errors,  0  skips Friday, October 4, 13
  24. 24. Step 1: Setup Testing Framework Friday, October 4, 13
  25. 25. Friday, October 4, 13
  26. 26. Friday, October 4, 13
  27. 27. Friday, October 4, 13
  28. 28. Friday, October 4, 13
  29. 29. • RSpec • MiniTest • test-unit • Bacon • Riot • Wrong • Shindo • testrocket • rubydoctest • Testy • Micronaut • Kintama • dtf • assert • test_inline • Lemon • Detest Friday, October 4, 13
  30. 30. MiniTest Friday, October 4, 13
  31. 31. Good Things Come in Small Packages Friday, October 4, 13
  32. 32. Friday, October 4, 13
  33. 33. Friday, October 4, 13
  34. 34. Friday, October 4, 13
  35. 35. Friday, October 4, 13
  36. 36. require  'minitest/autorun'   class  Foo    def  add(x,  y)        x  +  y    end end   describe  Foo  do    describe  '#add'  do        it  'adds  two  numbers'  do            Foo.new.add(4,  2).must_equal  6        end    end end Friday, October 4, 13
  37. 37. require  'minitest/autorun'   class  Foo    def  add(x,  y)        x  +  y    end end   class  TestFoo  <  MiniTest::Unit::TestCase    def  test_add        assert_equal  6,  Foo.new.add(4,  2)    end end Friday, October 4, 13
  38. 38. Friday, October 4, 13
  39. 39. IT SHIPS WITH RUBY!!! Friday, October 4, 13
  40. 40. >= 1.9 Friday, October 4, 13
  41. 41. also available as a gem Friday, October 4, 13
  42. 42. Familiar Syntax to RSpec or Test::Unit Friday, October 4, 13
  43. 43. MiniTest replaced Test::Unit in 1.9 Friday, October 4, 13
  44. 44. The Basics Friday, October 4, 13
  45. 45. MiniTest::Spec Friday, October 4, 13
  46. 46. describe  Something  do                 end Friday, October 4, 13
  47. 47. describe  Something  do      it  "does  something"  do          #  tests  go  here    end   end Friday, October 4, 13
  48. 48. describe  Something  do      before  do          #  setup  code  goes  here    end      after  do          #  tear  down  code  goes  here    end      it  "does  something"  do          #  tests  go  here    end   end Friday, October 4, 13
  49. 49. describe  Something  do      describe  'something  else'  do          it  "does  something"  do              #  tests  go  here        end      end   end Friday, October 4, 13
  50. 50. describe  Something  do      let(:something)  {  Something.new(name:  'Widget')  }      describe  'something  else'  do          it  "does  something"  do            something.name.must_equal  'Widget'        end      end   end Friday, October 4, 13
  51. 51. describe  Something  do      subject  {  Something.new(name:  'Widget')  }      describe  'something  else'  do          it  "does  something"  do            subject.name.must_equal  'Widget'        end      end   end Friday, October 4, 13
  52. 52. describe  Something  do      subject  {  Something.new(name:  'Widget')  }      context  'something  else'  do          it  "does  something"  do            subject.name.must_equal  'Widget'        end      end   end Friday, October 4, 13
  53. 53. scrap.rb:19:in  `block  in  <main>':  undefined  method  `context'  for  #<Class: 0x007fce92074b40>  (NoMethodError)                from  /Users/markbates/.../lib/minitest/spec.rb:71:in  `class_eval'                from  /Users/markbates/.../lib/minitest/spec.rb:71:in  `describe'                from  scrap.rb:15:in  `<main>' Friday, October 4, 13
  54. 54. class  MiniTest::Spec             end Friday, October 4, 13
  55. 55. class  MiniTest::Spec      class  <<  self        alias  :context  :describe    end   end Friday, October 4, 13
  56. 56. Pending Friday, October 4, 13
  57. 57. describe  Something  do                         end Friday, October 4, 13
  58. 58. describe  Something  do      it  'does  something'                   end Friday, October 4, 13
  59. 59. describe  Something  do      it  'does  something'      it  'does  something  else'  do        skip    end           end Friday, October 4, 13
  60. 60. describe  Something  do      it  'does  something'      it  'does  something  else'  do        skip    end      it  'does  another  thing'  do        skip  "here's  some  reason  why"    end   end Friday, October 4, 13
  61. 61. #  Running  tests:   SSS   Finished  tests  in  0.000912s,  3289.4737  tests/s,   0.0000  assertions/s.   3  tests,  0  assertions,  0  failures,  0  errors,  3  skips   Friday, October 4, 13
  62. 62. Expectations Friday, October 4, 13
  63. 63. • must_be • must_be_close_to • must_be_empty • must_be_instance_of • must_be_kind_of • must_be_nil • must_be_same_as • must_be_silent • must_be_within_epsilon • must_equal • must_include • must_match • must_output • must_respond_to • must_raise • must_send • must_throw Friday, October 4, 13
  64. 64. • wont_be • wont_be_close_to • wont_be_empty • wont_be_instance_of • wont_be_kind_of • wont_be_nil • wont_be_same_as • wont_be_silent • wont_be_within_epsilon • wont_equal • wont_include • wont_match • wont_output • wont_respond_to • wont_raise • wont_send • wont_throw Friday, October 4, 13
  65. 65. describe  Something  do      it  "does  something"  do        lambda  {nil  /  2}.must_raise  NoMethodError        ["one",  "two"].must_include  "one"        ["one",  "two"].wont_include  "three"        nil.must_be_nil        [].must_be  :empty?    end   end Friday, October 4, 13
  66. 66. MiniTest::Unit Friday, October 4, 13
  67. 67. class  TestSomething  <  MiniTest::Unit::TestCase           end Friday, October 4, 13
  68. 68. class  TestSomething  <  MiniTest::Unit::TestCase      def  test_something        #tests  go  here    end   end Friday, October 4, 13
  69. 69. class  TestSomething  <  MiniTest::Unit::TestCase      def  setup        #  setup  code  goes  here    end      def  teardown        #  tear  down  code  goes  here    end      def  test_something        #  tests  go  here    end   end Friday, October 4, 13
  70. 70. class  TestSomething  <  MiniTest::Unit::TestCase      def  test_something        assert  true    end                           end Friday, October 4, 13
  71. 71. class  TestSomething  <  MiniTest::Unit::TestCase      def  test_something        assert  true    end      class  TestSomethingElse  <  MiniTest::Unit::TestCase            def  test_something_else            assert  true        end            end   end Friday, October 4, 13
  72. 72. No let Friday, October 4, 13
  73. 73. No subject Friday, October 4, 13
  74. 74. Pending Friday, October 4, 13
  75. 75. class  SomethingTest  <  MiniTest::Unit::TestCase                   end Friday, October 4, 13
  76. 76. class  SomethingTest  <  MiniTest::Unit::TestCase      def  test_something        skip    end           end Friday, October 4, 13
  77. 77. class  SomethingTest  <  MiniTest::Unit::TestCase      def  test_something        skip    end      def  test_something_else        skip  "here's  some  reason  why"    end   end Friday, October 4, 13
  78. 78. #  Running  tests:   SS   Finished  tests  in  0.000663s,  3016.5913  tests/s,   0.0000  assertions/s.   2  tests,  0  assertions,  0  failures,  0  errors,  2  skips Friday, October 4, 13
  79. 79. Assertions Friday, October 4, 13
  80. 80. • assert • assert_block • assert_empty • assert_equal • assert_in_delta • assert_in_epsilon • assert_includes • assert_instance_of • assert_kind_of • assert_match • assert_nil • assert_operator • assert_output • assert_raises • assert_respond_to • assert_same • assert_send • assert_silent Friday, October 4, 13
  81. 81. • refute • refute_block • refute_empty • refute_equal • refute_in_delta • refute_in_epsilon • refute_includes • refute_instance_of • refute_kind_of • refute_match • refute_nil • refute_operator • refute_output • refute_raises • refute_respond_to • refute_same • refute_send • refute_silent Friday, October 4, 13
  82. 82. Mocking/Stubbing Friday, October 4, 13
  83. 83. Very Basic Friday, October 4, 13
  84. 84. describe  Something  do      let(:something)  {  MiniTest::Mock.new  }      it  "does  something"  do                          end   end Friday, October 4, 13
  85. 85. describe  Something  do      let(:something)  {  MiniTest::Mock.new  }      it  "does  something"  do        something.expect(:name,  'Widget')                  end   end Friday, October 4, 13
  86. 86. describe  Something  do      let(:something)  {  MiniTest::Mock.new  }      it  "does  something"  do        something.expect(:name,  'Widget')        something.name.must_equal  'Widget'          end   end Friday, October 4, 13
  87. 87. describe  Something  do      let(:something)  {  MiniTest::Mock.new  }      it  "does  something"  do        something.expect(:name,  'Widget')        something.name.must_equal  'Widget'        something.verify    end   end Friday, October 4, 13
  88. 88. describe  Something  do      let(:something)  {  MiniTest::Mock.new  }      it  "does  something"  do        something.expect(:name,  'Widget')        something.verify    end   end Friday, October 4, 13
  89. 89. #  Running  tests:   E   Finished  tests  in  0.000858s,  1165.5012  tests/s,  0.0000   assertions/s.      1)  Error: OpenStruct#test_0001_does  something: MockExpectationError:  expected  name()  =>  "Widget",  got  []        scrap.rb:22:in  `block  (2  levels)  in  <main>'   1  tests,  0  assertions,  0  failures,  1  errors,  0  skips   Friday, October 4, 13
  90. 90. describe  Something  do      let(:something)  {  Something.new(name:  'Widget')  }      it  "does  something"  do                      end   end Friday, October 4, 13
  91. 91. describe  Something  do      let(:something)  {  Something.new(name:  'Widget')  }      it  "does  something"  do        something.stub(:name,  'Thingy')  do                    end    end   end Friday, October 4, 13
  92. 92. describe  Something  do      let(:something)  {  Something.new(name:  'Widget')  }      it  "does  something"  do        something.stub(:name,  'Thingy')  do            something.name.must_equal  'Thingy'        end    end   end Friday, October 4, 13
  93. 93. Struct, OpenStruct Friday, October 4, 13
  94. 94. describe  "Something"  do      let(:something)  {  OpenStruct.new(name:  'Widget')  }      it  "does  something"  do        something.name.must_equal  'Widget'    end   end Friday, October 4, 13
  95. 95. describe  Something  do      let(:something)  {  Something.new(name:  'Widget')  }      it  "does  something"  do                          something.name.must_equal  'Thingy'    end   end Friday, October 4, 13
  96. 96. describe  Something  do      let(:something)  {  Something.new(name:  'Widget')  }      it  "does  something"  do        def  something.name            "Thingy"        end        something.name.must_equal  'Thingy'    end   end Friday, October 4, 13
  97. 97. Mocha, RR, FlexMock Friday, October 4, 13
  98. 98. Custom Assertions Friday, October 4, 13
  99. 99. describe  Something  do      it  "does  something"  do        1.2.must_round_to  1        1.7.wont_round_to  1    end   end Friday, October 4, 13
  100. 100. module  MiniTest::Assertions                       end   Friday, October 4, 13
  101. 101. module  MiniTest::Assertions      def  assert_equals_rounded(rounded,  decimal)      end               end   Friday, October 4, 13
  102. 102. module  MiniTest::Assertions      def  assert_equals_rounded(rounded,  decimal)        assert  rounded  ==  decimal.round,  "Expected  #{decimal}  to  round  to  #{rounded}"    end               end   Friday, October 4, 13
  103. 103. module  MiniTest::Assertions      def  assert_equals_rounded(rounded,  decimal)        assert  rounded  ==  decimal.round,  "Expected  #{decimal}  to  round  to  #{rounded}"    end      def  refute_equals_rounded(rounded,  decimal)            end   end   Friday, October 4, 13
  104. 104. module  MiniTest::Assertions      def  assert_equals_rounded(rounded,  decimal)        assert  rounded  ==  decimal.round,  "Expected  #{decimal}  to  round  to  #{rounded}"    end      def  refute_equals_rounded(rounded,  decimal)        assert  rounded  !=  decimal.round,  "Expected  #{decimal}  to  not  round  to  #{rounded}"    end   end   Friday, October 4, 13
  105. 105. module  MiniTest::Assertions      def  assert_equals_rounded(rounded,  decimal)        assert  rounded  ==  decimal.round,  "Expected  #{decimal}  to  round  to  #{rounded}"    end      def  refute_equals_rounded(rounded,  decimal)        assert  rounded  !=  decimal.round,  "Expected  #{decimal}  to  not  round  to  #{rounded}"    end   end   Numeric.infect_an_assertion  :assert_equals_rounded,  :must_round_to Numeric.infect_an_assertion  :refute_equals_rounded,  :wont_round_to Friday, October 4, 13
  106. 106. describe  Something  do      it  "does  something"  do        1.2.must_round_to  1        1.7.wont_round_to  1    end   end Friday, October 4, 13
  107. 107. Rails Friday, October 4, 13
  108. 108. gem “minitest-rails” Friday, October 4, 13
  109. 109. ENV["RAILS_ENV"]  =  "test" require  File.expand_path("../../config/environment",  __FILE__) require  "rails/test_help" require  "minitest/rails"   #  Add  `gem  "minitest-­‐rails-­‐capybara"`  to  the  test  group  of  your  Gemfile #  and  uncomment  the  following  if  you  want  Capybara  feature  tests #  require  "minitest/rails/capybara"           Friday, October 4, 13
  110. 110. ENV["RAILS_ENV"]  =  "test" require  File.expand_path("../../config/environment",  __FILE__) require  "rails/test_help" require  "minitest/rails"   #  Add  `gem  "minitest-­‐rails-­‐capybara"`  to  the  test  group  of  your  Gemfile #  and  uncomment  the  following  if  you  want  Capybara  feature  tests #  require  "minitest/rails/capybara"     class  ActiveSupport::TestCase      #  Add  more  helper  methods  to  be  used  by  all  tests  here...    before  do    end      after  do    end   end Friday, October 4, 13
  111. 111. ENV["RAILS_ENV"]  =  "test" require  File.expand_path("../../config/environment",  __FILE__) require  "rails/test_help" require  "minitest/rails"   #  Add  `gem  "minitest-­‐rails-­‐capybara"`  to  the  test  group  of  your  Gemfile #  and  uncomment  the  following  if  you  want  Capybara  feature  tests #  require  "minitest/rails/capybara"   module  MiniTest::Expectations    infect_an_assertion  :assert_redirected_to,  :must_redirect_to    infect_an_assertion  :assert_template,  :must_render_template    infect_an_assertion  :assert_response,  :must_respond_with end   class  ActiveSupport::TestCase      #  Add  more  helper  methods  to  be  used  by  all  tests  here...    before  do    end      after  do    end   end Friday, October 4, 13
  112. 112. rake  minitest                              #  Run  default  tests rake  minitest:all                      #  Run  all  tests rake  minitest:all:quick          #  Run  all  tests,  ungrouped  for  quicker  execution rake  minitest:controllers      #  Runs  tests  under  test/controllers rake  minitest:lib                      #  Runs  tests  under  test/lib rake  minitest:models                #  Runs  tests  under  test/models Friday, October 4, 13
  113. 113. task  :mt  =>  'minitest:all:quick' Rake::Task["default"].clear task  :default  =>  :mt Friday, October 4, 13
  114. 114. ruby  -­‐I  test  test/models/user_test.rb Friday, October 4, 13
  115. 115. describe  FeedController  do      describe  '#index'  do          it  'renders  an  atom  feed'  do            get  :index              must_render_template  :index        end          it  'redirects  from  an  RSS  feed'  do            get  :index,  format:  'rss'              must_redirect_to  feed_path(format:  :atom)        end      end   end Friday, October 4, 13
  116. 116. gem “guard-minitest” Friday, October 4, 13
  117. 117. guard  :minitest  do    watch(%r|^app/controllers/(.*).rb|)  {  |m|  "test/controllers/#{m[1]}_test.rb"  }    watch(%r|^app/helpers/(.*).rb|)          {  |m|  "test/helpers/#{m[1]}_test.rb"  }    watch(%r|^app/models/(.*).rb|)            {  |m|  "test/models/#{m[1]}_test.rb"  }    watch(%r{^test/test_helper.rb})          {  'test'  }    watch(%r{^test/.+_test.rb})    watch(%r{^app/(.+).rb})                                                              {  |m|  "test/#{m[1]}_test.rb"  }    watch(%r{^app/controllers/application_controller.rb})  {  'test/controllers'  }    watch(%r{^lib/(.+).rb})                                                              {  |m|  "test/lib/#{m[1]}_test.rb"  } end Friday, October 4, 13
  118. 118. gem “m” Friday, October 4, 13
  119. 119. m  test/models/user_test.rb:37 Friday, October 4, 13
  120. 120. gem “minitest-rails-capybara” Friday, October 4, 13
  121. 121. feature  "Can  Access  Home"  do      scenario  "has  content"  do        visit  root_path        assert  page.has_content?("Home#index")    end     end Friday, October 4, 13
  122. 122. Wrapping Up Friday, October 4, 13
  123. 123. familiar syntax Friday, October 4, 13
  124. 124. 95% of RSpec Friday, October 4, 13
  125. 125. lightweight Friday, October 4, 13
  126. 126. rspec  (2.14.1)    rspec-­‐core  (~>  2.14.0)    rspec-­‐expectations  (~>  2.14.0)    rspec-­‐mocks  (~>  2.14.0) rspec-­‐core  (2.14.5) rspec-­‐expectations  (2.14.2)    diff-­‐lcs  (>=  1.1.3,  <  2.0) Friday, October 4, 13
  127. 127. Ships with Ruby! Friday, October 4, 13
  128. 128. • https://github.com/seattlerb/minitest • http://www.mattsears.com/articles/2011/12/10/minitest-quick-reference • http://blog.arvidandersson.se/2012/03/28/minimalicous-testing-in-ruby-1-9 • https://github.com/blowmage/minitest-rails-capybara • https://github.com/guard/guard-minitest • https://github.com/qrush/m • http://www.metacasts.tv/casts/minitest-spec • http://www.metacasts.tv/casts/minitest-rails • http://www.metacasts.tv/casts/testing-sinatra Friday, October 4, 13
  129. 129. Thanks! @markbates www.metacasts.tv Friday, October 4, 13

×