$30 off During Our Annual Pro Sale. View Details »

expect(RSpec::3).to be_coming_soon @Dius_AU September 2013

Jon Rowe
September 12, 2013

expect(RSpec::3).to be_coming_soon @Dius_AU September 2013

Repeat of my RSpec 3 talk given to DiusAU

Jon Rowe

September 12, 2013
Tweet

More Decks by Jon Rowe

Other Decks in Technology

Transcript

  1. .*...........*.*...................................................*..............*...............*.....
    ...........F....................*...........*.............*.*...........*...........F.*..............F.
    ..........FF...........**...........*...........**...........*.*..........................*...........
    *.*...................................................*..............*...............*................F..
    ..................*...........*.............*.*...........*...........F.*..............F...........FF.
    ..........**...........*...........**...........*.*..........................*...........*.*..........
    .........................................*..............*...............*................F................
    ....*...........*.............*.*...........*...........F.*..............F...........FF...........**
    ...........*...........**...........*.*..........................*...........*.*.......................
    ............................*..............*...............*................F....................*.......
    ....*.............*.*...........*...........F.*..............F...........FF...........**...........*
    ...........**...........*.*..........................*...........*.*....................................
    ...............*..............*...............*................F....................*...........*........
    .....*.*...........*...........F.*..............F...........FF...........**...........*...........**
    ...........*.*..........................*...........*.*..................................................
    .*..............*...............*................F....................*...........*.............*.*....
    .......*...........F.*..............F...........FF...........**...........*...........**...........*
    .*..........................*...........*.*...................................................*..........
    ....*...............*................F....................*...........*.............*.*...........*....
    .......F.*..............F...........FF...........**...........*...........**...........*.*..........
    ................*...........*.*...................................................*..............*.......
    ........*................F....................*...........*.............*.*...........*...........F.*..
    ............F...........FF...........**...........*...........**...........*.*........................
    ..*...........*.*...................................................*..............*...............*....
    ............F....................*...........*.............*.*...........*...........F.*..............
    F...........FF...........**...........*...........**...........*.*..........................*........
    ...*.*...................................................*..............*...............*................
    F....................*...........*.............*.*...........*...........F.*..............F...........
    FF...........**...........*...........**...........*.*..........................*...........*.*.....
    ..............................................*..............*...............*................F...........
    .........*...........*.............*.*...........*...........F.*..............F...........FF..........
    .**...........*...........**...........*.*..........................*...........*.*...................
    ................................*..............*...............*................F....................*...
    ........*.............*.*...........*...........F.*..............F...........FF...........**.........
    expect(RSpec::3).to
    be_coming_soon
    JON ROWE
    Thursday, 12 September 13

    View Slide

  2. RSPEC
    Thursday, 12 September 13

    View Slide

  3. RSPEC
    Released 0.x. 2005
    Thursday, 12 September 13

    View Slide

  4. RSPEC
    Released 0.x. 2005
    Released 1.x. 2007
    Thursday, 12 September 13

    View Slide

  5. RSPEC
    Released 0.x. 2005
    Released 1.x. 2007
    Released 2.x 2010
    Thursday, 12 September 13

    View Slide

  6. RSPEC 2.x
    Thursday, 12 September 13

    View Slide

  7. RSPEC 2.x
    85 Contributors
    Thursday, 12 September 13

    View Slide

  8. RSPEC 2.x
    85 Contributors
    Modularisation
    Thursday, 12 September 13

    View Slide

  9. RSPEC 2.x
    85 Contributors
    Modularisation
    Filters, Meta Data
    Thursday, 12 September 13

    View Slide

  10. RSPEC 2.x
    85 Contributors
    Modularisation
    Filters, Meta Data
    Rails 3
    Thursday, 12 September 13

    View Slide

  11. Thursday, 12 September 13

    View Slide

  12. 365 Contributors
    Thursday, 12 September 13

    View Slide

  13. 365 Contributors
    >12340 Commits
    Thursday, 12 September 13

    View Slide

  14. 365 Contributors
    >12340 Commits
    > 14800 LOC
    Thursday, 12 September 13

    View Slide

  15. .*...........*.*...................................................*..............*...............*.....
    ...........F....................*...........*.............*.*...........*...........F.*..............F.
    ..........FF...........**...........*...........**...........*.*..........................*...........
    *.*...................................................*..............*...............*................F..
    ..................*...........*.............*.*...........*...........F.*..............F...........FF.
    ..........**...........*...........**...........*.*..........................*...........*.*..........
    .........................................*..............*...............*................F................
    ....*...........*.............*.*...........*...........F.*..............F...........FF...........**
    ...........*...........**...........*.*..........................*...........*.*.......................
    ............................*..............*...............*................F....................*.......
    ....*.............*.*...........*...........F.*..............F...........FF...........**...........*
    ...........**...........*.*..........................*...........*.*....................................
    ...............*..............*...............*................F....................*...........*........
    .....*.*...........*...........F.*..............F...........FF...........**...........*...........**
    ...........*.*..........................*...........*.*..................................................
    .*..............*...............*................F....................*...........*.............*.*....
    .......*...........F.*..............F...........FF...........**...........*...........**...........*
    .*..........................*...........*.*...................................................*..........
    ....*...............*................F....................*...........*.............*.*...........*....
    .......F.*..............F...........FF...........**...........*...........**...........*.*..........
    ................*...........*.*...................................................*..............*.......
    ........*................F....................*...........*.............*.*...........*...........F.*..
    ............F...........FF...........**...........*...........**...........*.*........................
    ..*...........*.*...................................................*..............*...............*....
    ............F....................*...........*.............*.*...........*...........F.*..............
    F...........FF...........**...........*...........**...........*.*..........................*........
    ...*.*...................................................*..............*...............*................
    F....................*...........*.............*.*...........*...........F.*..............F...........
    FF...........**...........*...........**...........*.*..........................*...........*.*.....
    ..............................................*..............*...............*................F...........
    .........*...........*.............*.*...........*...........F.*..............F...........FF..........
    .**...........*...........**...........*.*..........................*...........*.*...................
    ................................*..............*...............*................F....................*...
    ........*.............*.*...........*...........F.*..............F...........FF...........**.........
    RSPEC 3
    Thursday, 12 September 13

    View Slide

  16. SEMVER
    Thursday, 12 September 13

    View Slide

  17. SEMVER
    Major Release
    Thursday, 12 September 13

    View Slide

  18. SEMVER
    Major Release
    Breaking Changes
    Thursday, 12 September 13

    View Slide

  19. SEMVER
    Major Release
    Breaking Changes
    Cleanup deprecations
    Thursday, 12 September 13

    View Slide

  20. SEMVER
    Major Release
    Breaking Changes
    Cleanup deprecations
    Changed supported Rubies
    Thursday, 12 September 13

    View Slide

  21. RUBY
    Thursday, 12 September 13

    View Slide

  22. RUBY
    1.8.6
    Thursday, 12 September 13

    View Slide

  23. RUBY
    1.8.6
    1.8.7
    Thursday, 12 September 13

    View Slide

  24. RUBY
    1.8.6
    1.8.7
    1.9.1
    Thursday, 12 September 13

    View Slide

  25. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    Thursday, 12 September 13

    View Slide

  26. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    1.9.3
    Thursday, 12 September 13

    View Slide

  27. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    1.9.3
    2.0.0
    Thursday, 12 September 13

    View Slide

  28. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    1.9.3
    2.0.0
    REE
    Thursday, 12 September 13

    View Slide

  29. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    1.9.3
    2.0.0
    REE
    JRuby 1.8
    Thursday, 12 September 13

    View Slide

  30. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    1.9.3
    2.0.0
    REE
    JRuby 1.8
    JRuby 1.9
    Thursday, 12 September 13

    View Slide

  31. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    1.9.3
    2.0.0
    REE
    JRuby 1.8
    JRuby 1.9
    ~RBX 1.8
    Thursday, 12 September 13

    View Slide

  32. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    1.9.3
    2.0.0
    REE
    JRuby 1.8
    JRuby 1.9
    ~RBX 1.8
    ~RBX 1.9
    Thursday, 12 September 13

    View Slide

  33. RUBY
    1.8.7
    1.9.2
    1.9.3
    2.0.0
    REE
    JRuby 1.8
    JRuby 1.9
    ~RBX 1.8
    ~RBX 1.9
    Thursday, 12 September 13

    View Slide

  34. Cleanup
    Thursday, 12 September 13

    View Slide

  35. Cleanup
    Removal of string evals
    Thursday, 12 September 13

    View Slide

  36. Cleanup
    Removal of string evals
    Removal of workarounds for 1.8.6
    Thursday, 12 September 13

    View Slide

  37. Cleanup
    Removal of string evals
    Removal of workarounds for 1.8.6
    Remove Deprecations
    Thursday, 12 September 13

    View Slide

  38. Cleanup
    Removal of string evals
    Removal of workarounds for 1.8.6
    Remove Deprecations
    Extract Gems
    Thursday, 12 September 13

    View Slide

  39. Deprecations
    Thursday, 12 September 13

    View Slide

  40. Deprecations
    Spec
    Thursday, 12 September 13

    View Slide

  41. Deprecations
    Spec
    stub! / unstub!
    Thursday, 12 September 13

    View Slide

  42. Deprecations
    Spec
    stub! / unstub!
    mock / stub
    Thursday, 12 September 13

    View Slide

  43. Deprecations
    Spec
    stub! / unstub!
    mock / stub
    at_least(0) / any_number_of times
    Thursday, 12 September 13

    View Slide

  44. Deprecations
    Spec
    stub! / unstub!
    mock / stub
    at_least(0) / any_number_of times
    let/subject in before(:all)
    Thursday, 12 September 13

    View Slide

  45. Deprecations
    Spec
    stub! / unstub!
    mock / stub
    at_least(0) / any_number_of times
    let/subject in before(:all)
    should_not_receive(...).and_return
    Thursday, 12 September 13

    View Slide

  46. Extract Gems
    Thursday, 12 September 13

    View Slide

  47. Extract Gems
    autotest
    Thursday, 12 September 13

    View Slide

  48. Extract Gems
    autotest
    rcov
    Thursday, 12 September 13

    View Slide

  49. Extract Gems
    autotest
    rcov
    TextMate formatter
    Thursday, 12 September 13

    View Slide

  50. Extract Gems
    autotest
    rcov
    TextMate formatter
    its
    Thursday, 12 September 13

    View Slide

  51. Extract Gems
    autotest
    rcov
    TextMate formatter
    its
    collection_matchers
    Thursday, 12 September 13

    View Slide

  52. Changes
    Thursday, 12 September 13

    View Slide

  53. Changes
    New reporter / formatter API
    Thursday, 12 September 13

    View Slide

  54. Changes
    New reporter / formatter API
    New shared_examples behaviour
    Thursday, 12 September 13

    View Slide

  55. Changes
    New reporter / formatter API
    New shared_examples behaviour
    Block based DSL yield example
    Thursday, 12 September 13

    View Slide

  56. Changes
    New reporter / formatter API
    New shared_examples behaviour
    Block based DSL yield example
    Verifying doubles
    Thursday, 12 September 13

    View Slide

  57. Reporter API
    Thursday, 12 September 13

    View Slide

  58. Reporter API
    Breaking change
    Thursday, 12 September 13

    View Slide

  59. Reporter API
    Breaking change
    Event / subscription based
    Thursday, 12 September 13

    View Slide

  60. Reporter API
    Breaking change
    Event / subscription based
    Message Objects
    Thursday, 12 September 13

    View Slide

  61. shared_examples
    Thursday, 12 September 13

    View Slide

  62. shared_examples
    Currently shared examples are global
    Thursday, 12 September 13

    View Slide

  63. shared_examples
    Currently shared examples are global
    Change to defined in context
    Thursday, 12 September 13

    View Slide

  64. shared_examples
    Currently shared examples are global
    Change to defined in context
    Cross nesting won’t be possible
    Thursday, 12 September 13

    View Slide

  65. DSL yields example
    Thursday, 12 September 13

    View Slide

  66. DSL yields example
    Remove access to #example
    it { example } => NoMethodError
    Thursday, 12 September 13

    View Slide

  67. DSL yields example
    Remove access to #example
    it { example } => NoMethodError
    Changing to yielded to block
    it { |example| ... }
    let(:thing) { |example| ... }
    Thursday, 12 September 13

    View Slide

  68. Verifying Doubles
    Thursday, 12 September 13

    View Slide

  69. Verifying Doubles
    Ported from rspec-fire (@xaviershay)
    Thursday, 12 September 13

    View Slide

  70. Verifying Doubles
    Ported from rspec-fire (@xaviershay)
    Behave as normal in isolation
    Thursday, 12 September 13

    View Slide

  71. Verifying Doubles
    Ported from rspec-fire (@xaviershay)
    Behave as normal in isolation
    Verify method signature when loaded
    Thursday, 12 September 13

    View Slide

  72. Verifying Doubles
    Ported from rspec-fire (@xaviershay)
    Behave as normal in isolation
    Verify method signature when loaded
    instance_double / class_double
    Thursday, 12 September 13

    View Slide

  73. Verifying Doubles
    Ported from rspec-fire (@xaviershay)
    Behave as normal in isolation
    Verify method signature when loaded
    instance_double / class_double
    as_stubbed_const
    Thursday, 12 September 13

    View Slide

  74. .*...........*.*...................................................*..............*...............*.....
    ...........F....................*...........*.............*.*...........*...........F.*..............F.
    ..........FF...........**...........*...........**...........*.*..........................*...........
    *.*...................................................*..............*...............*................F..
    ..................*...........*.............*.*...........*...........F.*..............F...........FF.
    ..........**...........*...........**...........*.*..........................*...........*.*..........
    .........................................*..............*...............*................F................
    ....*...........*.............*.*...........*...........F.*..............F...........FF...........**
    ...........*...........**...........*.*..........................*...........*.*.......................
    ............................*..............*...............*................F....................*.......
    ....*.............*.*...........*...........F.*..............F...........FF...........**...........*
    ...........**...........*.*..........................*...........*.*....................................
    ...............*..............*...............*................F....................*...........*........
    .....*.*...........*...........F.*..............F...........FF...........**...........*...........**
    ...........*.*..........................*...........*.*..................................................
    .*..............*...............*................F....................*...........*.............*.*....
    .......*...........F.*..............F...........FF...........**...........*...........**...........*
    .*..........................*...........*.*...................................................*..........
    ....*...............*................F....................*...........*.............*.*...........*....
    .......F.*..............F...........FF...........**...........*...........**...........*.*..........
    ................*...........*.*...................................................*..............*.......
    ........*................F....................*...........*.............*.*...........*...........F.*..
    ............F...........FF...........**...........*...........**...........*.*........................
    ..*...........*.*...................................................*..............*...............*....
    ............F....................*...........*.............*.*...........*...........F.*..............
    F...........FF...........**...........*...........**...........*.*..........................*........
    ...*.*...................................................*..............*...............*................
    F....................*...........*.............*.*...........*...........F.*..............F...........
    FF...........**...........*...........**...........*.*..........................*...........*.*.....
    ..............................................*..............*...............*................F...........
    .........*...........*.............*.*...........*...........F.*..............F...........FF..........
    .**...........*...........**...........*.*..........................*...........*.*...................
    ................................*..............*...............*................F....................*...
    ........*.............*.*...........*...........F.*..............F...........FF...........**.........
    expect(monkey_patches).
    to be_close_to 0
    Thursday, 12 September 13

    View Slide

  75. Monkey Patching
    Thursday, 12 September 13

    View Slide

  76. Monkey Patching
    Causes problems with conflicts
    Thursday, 12 September 13

    View Slide

  77. Monkey Patching
    Causes problems with conflicts
    Causes problems with internal state
    Thursday, 12 September 13

    View Slide

  78. Monkey Patching
    Causes problems with conflicts
    Causes problems with internal state
    Clobbered by other monkeys
    Thursday, 12 September 13

    View Slide

  79. expect syntax
    object.should matcher(result)
    object.should_not matcher(result)
    expect(object).to matcher(result)
    expect(object).to_not matcher(result)
    Thursday, 12 September 13

    View Slide

  80. expect syntax
    object.should_receive(:message)
    object.should_not_receive(:message)
    expect(object).to receive(:message)
    expect(object).to_not receive(:message)
    Thursday, 12 September 13

    View Slide

  81. Expect Syntax
    Thursday, 12 September 13

    View Slide

  82. Expect Syntax
    The preferred syntax going forward
    Thursday, 12 September 13

    View Slide

  83. Expect Syntax
    The preferred syntax going forward
    Potentially only syntax by default
    Thursday, 12 September 13

    View Slide

  84. describe
    RSpec.describe do
    it “should not be monkey patchin’” do
    expect(monkey_patches).to be_close_to 0
    end
    end
    Thursday, 12 September 13

    View Slide

  85. More Changes
    Thursday, 12 September 13

    View Slide

  86. More Changes
    be_truthy / be_falsey
    Thursday, 12 September 13

    View Slide

  87. More Changes
    be_truthy / be_falsey
    receive_messages( msg: “val”, ... )
    Thursday, 12 September 13

    View Slide

  88. More Changes
    be_truthy / be_falsey
    receive_messages( msg: “val”, ... )
    No more integrated --debugger
    Thursday, 12 September 13

    View Slide

  89. More Changes
    be_truthy / be_falsey
    receive_messages( msg: “val”, ... )
    No more integrated --debugger
    New --dry-run mode
    Thursday, 12 September 13

    View Slide

  90. More Changes
    be_truthy / be_falsey
    receive_messages( msg: “val”, ... )
    No more integrated --debugger
    New --dry-run mode
    Less spammy deprecations
    Thursday, 12 September 13

    View Slide

  91. TRANSITION
    Thursday, 12 September 13

    View Slide

  92. TRANSITION
    2.14 (last release of 2.x.)
    Thursday, 12 September 13

    View Slide

  93. TRANSITION
    2.14 (last release of 2.x.)
    2.99 (transition)
    Thursday, 12 September 13

    View Slide

  94. TRANSITION
    2.14 (last release of 2.x.)
    2.99 (transition)
    3.0 (rc then final)
    Thursday, 12 September 13

    View Slide

  95. Summary
    Thursday, 12 September 13

    View Slide

  96. Summary
    No more 1.8.6 / 1.9.1
    Thursday, 12 September 13

    View Slide

  97. Summary
    No more 1.8.6 / 1.9.1
    Less monkey patching (use expect)
    Thursday, 12 September 13

    View Slide

  98. Summary
    No more 1.8.6 / 1.9.1
    Less monkey patching (use expect)
    New reporters
    Thursday, 12 September 13

    View Slide

  99. Summary
    No more 1.8.6 / 1.9.1
    Less monkey patching (use expect)
    New reporters
    New shared_example behaviour
    Thursday, 12 September 13

    View Slide

  100. Summary
    No more 1.8.6 / 1.9.1
    Less monkey patching (use expect)
    New reporters
    New shared_example behaviour
    Cleaner, leaner, meaner!
    Thursday, 12 September 13

    View Slide

  101. .*...........*.*...................................................*..............*...............*.....
    ...........F....................*...........*.............*.*...........*...........F.*..............F.
    ..........FF...........**...........*...........**...........*.*..........................*...........
    *.*...................................................*..............*...............*................F..
    ..................*...........*.............*.*...........*...........F.*..............F...........FF.
    ..........**...........*...........**...........*.*..........................*...........*.*..........
    .........................................*..............*...............*................F................
    ....*...........*.............*.*...........*...........F.*..............F...........FF...........**
    ...........*...........**...........*.*..........................*...........*.*.......................
    ............................*..............*...............*................F....................*.......
    ....*.............*.*...........*...........F.*..............F...........FF...........**...........*
    ...........**...........*.*..........................*...........*.*....................................
    ...............*..............*...............*................F....................*...........*........
    .....*.*...........*...........F.*..............F...........FF...........**...........*...........**
    ...........*.*..........................*...........*.*..................................................
    .*..............*...............*................F....................*...........*.............*.*....
    .......*...........F.*..............F...........FF...........**...........*...........**...........*
    .*..........................*...........*.*...................................................*..........
    ....*...............*................F....................*...........*.............*.*...........*....
    .......F.*..............F...........FF...........**...........*...........**...........*.*..........
    ................*...........*.*...................................................*..............*.......
    ........*................F....................*...........*.............*.*...........*...........F.*..
    ............F...........FF...........**...........*...........**...........*.*........................
    ..*...........*.*...................................................*..............*...............*....
    ............F....................*...........*.............*.*...........*...........F.*..............
    F...........FF...........**...........*...........**...........*.*..........................*........
    ...*.*...................................................*..............*...............*................
    F....................*...........*.............*.*...........*...........F.*..............F...........
    FF...........**...........*...........**...........*.*..........................*...........*.*.....
    ..............................................*..............*...............*................F...........
    .........*...........*.............*.*...........*...........F.*..............F...........FF..........
    .**...........*...........**...........*.*..........................*...........*.*...................
    ................................*..............*...............*................F....................*...
    ........*.............*.*...........*...........F.*..............F...........FF...........**.........
    QUESTIONS?
    Thursday, 12 September 13

    View Slide

  102. .*...........*.*...................................................*..............*...............*.....
    ...........F....................*...........*.............*.*...........*...........F.*..............F.
    ..........FF...........**...........*...........**...........*.*..........................*...........
    *.*...................................................*..............*...............*................F..
    ..................*...........*.............*.*...........*...........F.*..............F...........FF.
    ..........**...........*...........**...........*.*..........................*...........*.*..........
    .........................................*..............*...............*................F................
    ....*...........*.............*.*...........*...........F.*..............F...........FF...........**
    ...........*...........**...........*.*..........................*...........*.*.......................
    ............................*..............*...............*................F....................*.......
    ....*.............*.*...........*...........F.*..............F...........FF...........**...........*
    ...........**...........*.*..........................*...........*.*....................................
    ...............*..............*...............*................F....................*...........*........
    .....*.*...........*...........F.*..............F...........FF...........**...........*...........**
    ...........*.*..........................*...........*.*..................................................
    .*..............*...............*................F....................*...........*.............*.*....
    .......*...........F.*..............F...........FF...........**...........*...........**...........*
    .*..........................*...........*.*...................................................*..........
    ....*...............*................F....................*...........*.............*.*...........*....
    .......F.*..............F...........FF...........**...........*...........**...........*.*..........
    ................*...........*.*...................................................*..............*.......
    ........*................F....................*...........*.............*.*...........*...........F.*..
    ............F...........FF...........**...........*...........**...........*.*........................
    ..*...........*.*...................................................*..............*...............*....
    ............F....................*...........*.............*.*...........*...........F.*..............
    F...........FF...........**...........*...........**...........*.*..........................*........
    ...*.*...................................................*..............*...............*................
    F....................*...........*.............*.*...........*...........F.*..............F...........
    FF...........**...........*...........**...........*.*..........................*...........*.*.....
    ..............................................*..............*...............*................F...........
    .........*...........*.............*.*...........*...........F.*..............F...........FF..........
    .**...........*...........**...........*.*..........................*...........*.*...................
    ................................*..............*...............*................F....................*...
    ........*.............*.*...........*...........F.*..............F...........FF...........**.........
    THANKS
    @jonrowe (Twitter, GitHub, etc)
    http://jonrowe.co.uk
    Thursday, 12 September 13

    View Slide