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

expect(RSpec::3).to be_coming_soon #RoRoSyd May 2013

expect(RSpec::3).to be_coming_soon #RoRoSyd May 2013

Jon Rowe

May 14, 2013
Tweet

More Decks by Jon Rowe

Other Decks in Programming

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

    View Slide

  2. RSPEC

    View Slide

  3. RSPEC
    Released 0.x. 2005

    View Slide

  4. RSPEC
    Released 0.x. 2005
    Released 1.x. 2007

    View Slide

  5. RSPEC
    Released 0.x. 2005
    Released 1.x. 2007
    Released 2.x 2010

    View Slide

  6. RSPEC 2.x

    View Slide

  7. RSPEC 2.x
    85 Contributors

    View Slide

  8. RSPEC 2.x
    85 Contributors
    Modularisation

    View Slide

  9. RSPEC 2.x
    85 Contributors
    Modularisation
    Filters, Meta Data

    View Slide

  10. RSPEC 2.x
    85 Contributors
    Modularisation
    Filters, Meta Data
    Rails 3

    View Slide

  11. View Slide

  12. 365 Contributors

    View Slide

  13. 365 Contributors
    >12340 Commits

    View Slide

  14. 365 Contributors
    >12340 Commits
    > 14800 LOC

    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

    View Slide

  16. SEMVER

    View Slide

  17. SEMVER
    Major Release

    View Slide

  18. SEMVER
    Major Release
    Breaking Changes

    View Slide

  19. SEMVER
    Major Release
    Breaking Changes
    Cleanup deprecations

    View Slide

  20. SEMVER
    Major Release
    Breaking Changes
    Cleanup deprecations
    Changed supported Rubies

    View Slide

  21. RUBY

    View Slide

  22. RUBY
    1.8.6

    View Slide

  23. RUBY
    1.8.6
    1.8.7

    View Slide

  24. RUBY
    1.8.6
    1.8.7
    1.9.1

    View Slide

  25. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2

    View Slide

  26. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    1.9.3

    View Slide

  27. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    1.9.3
    2.0.0

    View Slide

  28. RUBY
    1.8.6
    1.8.7
    1.9.1
    1.9.2
    1.9.3
    2.0.0
    REE

    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

    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

    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

    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

    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

    View Slide

  34. Cleanup

    View Slide

  35. Cleanup
    Removal of string evals

    View Slide

  36. Cleanup
    Removal of string evals
    Removal of workarounds for 1.8.6

    View Slide

  37. Cleanup
    Removal of string evals
    Removal of workarounds for 1.8.6
    Remove Deprecations

    View Slide

  38. Cleanup
    Removal of string evals
    Removal of workarounds for 1.8.6
    Remove Deprecations
    Extract Gems

    View Slide

  39. Deprecations

    View Slide

  40. Deprecations
    Spec

    View Slide

  41. Deprecations
    Spec
    stub! / unstub!

    View Slide

  42. Deprecations
    Spec
    stub! / unstub!
    mock / stub

    View Slide

  43. Deprecations
    Spec
    stub! / unstub!
    mock / stub
    at_least(0) / any_number_of times

    View Slide

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

    View Slide

  45. Extract Gems

    View Slide

  46. Extract Gems
    autotest

    View Slide

  47. Extract Gems
    autotest
    rcov

    View Slide

  48. Extract Gems
    autotest
    rcov
    TextMate formatter

    View Slide

  49. Extract Gems
    autotest
    rcov
    TextMate formatter
    its

    View Slide

  50. Changes

    View Slide

  51. Changes
    New reporter / formatter API

    View Slide

  52. Changes
    New reporter / formatter API
    shared_examples

    View Slide

  53. Reporter API

    View Slide

  54. Reporter API
    Breaking change

    View Slide

  55. Reporter API
    Breaking change
    Event / subscription based

    View Slide

  56. Reporter API
    Breaking change
    Event / subscription based
    Message Objects

    View Slide

  57. shared_examples

    View Slide

  58. shared_examples
    Currently shared examples are global

    View Slide

  59. shared_examples
    Currently shared examples are global
    Change to defined in context

    View Slide

  60. shared_examples
    Currently shared examples are global
    Change to defined in context
    Cross nesting won’t be possible

    View Slide

  61. .*...........*.*...................................................*..............*...............*.....
    ...........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

    View Slide

  62. Monkey Patching

    View Slide

  63. Monkey Patching
    Causes problems with conflicts

    View Slide

  64. Monkey Patching
    Causes problems with conflicts
    Causes problems with internal state

    View Slide

  65. Monkey Patching
    Causes problems with conflicts
    Causes problems with internal state
    Clobbered by other monkeys

    View Slide

  66. expect syntax
    object.should matcher(result)
    object.should_not matcher(result)
    expect(object).to matcher(result)
    expect(object).to_not matcher(result)

    View Slide

  67. expect syntax
    object.should_receive(:message)
    object.should_not_receive(:message)
    expect(object).to receive(:message)
    expect(object).to_not receive(:message)

    View Slide

  68. Expect Syntax

    View Slide

  69. Expect Syntax
    The preferred syntax going forward

    View Slide

  70. Expect Syntax
    The preferred syntax going forward
    Potentially only syntax by default

    View Slide

  71. describe
    RSpec.describe do
    it “should not be monkey patchin’” do
    expect(monkey_patches).to be_close_to 0
    end
    end

    View Slide

  72. TRANSITION

    View Slide

  73. TRANSITION
    2.14 (last release of 2.x.)

    View Slide

  74. TRANSITION
    2.14 (last release of 2.x.)
    2.99 (transition)

    View Slide

  75. TRANSITION
    2.14 (last release of 2.x.)
    2.99 (transition)
    3.0 (rc then final)

    View Slide

  76. Summary

    View Slide

  77. Summary
    No more 1.8.6 / 1.9.1

    View Slide

  78. Summary
    No more 1.8.6 / 1.9.1
    Less monkey patching (use expect)

    View Slide

  79. Summary
    No more 1.8.6 / 1.9.1
    Less monkey patching (use expect)
    New reporters

    View Slide

  80. Summary
    No more 1.8.6 / 1.9.1
    Less monkey patching (use expect)
    New reporters
    New shared_example behaviour

    View Slide

  81. Summary
    No more 1.8.6 / 1.9.1
    Less monkey patching (use expect)
    New reporters
    New shared_example behaviour
    Cleaner, leaner, meaner!

    View Slide

  82. .*...........*.*...................................................*..............*...............*.....
    ...........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?

    View Slide

  83. .*...........*.*...................................................*..............*...............*.....
    ...........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

    View Slide