Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How we test our projects

Terry
November 18, 2012

How we test our projects

Rubyconf China 2012

Terry

November 18, 2012
Tweet

More Decks by Terry

Other Decks in Programming

Transcript

  1. View Slide

  2. whoami

    View Slide

  3. View Slide

  4. 太檑

    View Slide

  5. Terry

    View Slide

  6. @poshboytl

    View Slide

  7. Co-founder of
    Pragmatic.ly

    View Slide

  8. View Slide

  9. Creator of
    Railscasts-china.com

    View Slide

  10. View Slide

  11. Survey

    View Slide

  12. How many people
    write tests?

    View Slide

  13. How many people use
    RSpec?

    View Slide

  14. Tools we use

    View Slide

  15. View Slide

  16. I love RSpec!

    View Slide

  17. View Slide

  18. View Slide

  19. Bad boy!

    View Slide

  20. View Slide

  21. x.should == y

    View Slide

  22. View Slide

  23. View Slide

  24. Straightforward!

    View Slide

  25. asset_equal y, x

    View Slide

  26. View Slide

  27. View Slide

  28. This is just right!

    View Slide

  29. Pillow War!

    View Slide

  30. Peace! Choose what
    you like!

    View Slide

  31. Try it, instead of
    following anybody.

    View Slide

  32. Syntax

    View Slide

  33. Syntax
    Sugar

    View Slide

  34. Syntax
    Sugar
    DSL

    View Slide

  35. Is syntax important?

    View Slide

  36. View Slide

  37. View Slide

  38. View Slide

  39. Syntax is important, that’s the
    most important reason why we
    love Ruby! It also can be the
    reason we love RSepc!

    View Slide

  40. Syntax is important, that’s the
    most important reason why we
    love Ruby! It also can be the
    reason we love RSepc!
    Terry Tai

    View Slide

  41. Let’s talk about RSpec!

    View Slide

  42. Our practices

    View Slide

  43. View Slide

  44. View Slide

  45. View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. View Slide

  53. View Slide

  54. View Slide

  55. View Slide

  56. View Slide

  57. View Slide

  58. View Slide

  59. Setup phase contains two parts
    use ‘let’ to initialize data
    ‘before’ block to do some actions

    View Slide

  60. View Slide

  61. View Slide

  62. View Slide

  63. View Slide

  64. View Slide

  65. View Slide

  66. View Slide

  67. View Slide

  68. Why straightforward is
    important for us?

    View Slide

  69. View Slide

  70. View Slide

  71. View Slide

  72. The sugar we don’t like
    very much

    View Slide

  73. View Slide

  74. View Slide

  75. View Slide

  76. RSpec done

    View Slide

  77. View Slide

  78. Problem of Fixtures

    View Slide

  79. Hard to read
    Hard to write
    Hard to maintain

    View Slide

  80. View Slide

  81. View Slide

  82. What’s the password?

    View Slide

  83. What’s the password?

    View Slide

  84. What’s the password?
    Add new records?

    View Slide

  85. Fixtures separate the
    data and the tests

    View Slide

  86. View Slide

  87. View Slide

  88. Bullshit!

    View Slide

  89. View Slide

  90. What’s the advantage
    of fixtures?

    View Slide

  91. It’s really fast!!

    View Slide

  92. Some practices for
    Factory Girl

    View Slide

  93. View Slide

  94. View Slide

  95. View Slide

  96. View Slide

  97. View Slide

  98. View Slide

  99. View Slide

  100. View Slide

  101. Random data is a
    advantage of factory
    to fixtures

    View Slide

  102. View Slide

  103. Update: If you wanna use
    LoremIpsum class still
    need the gems like
    forgery or lorem-ipsum.

    View Slide

  104. View Slide

  105. View Slide

  106. View Slide

  107. View Slide

  108. View Slide

  109. View Slide

  110. How we run tests?

    View Slide

  111. You might see this

    View Slide

  112. But......
    I really don’t use it

    View Slide

  113. Tell you a secret

    View Slide

  114. I run my tests manually

    View Slide

  115. Why?

    View Slide

  116. probably, I type
    :w
    so frequently
    and quickly. LOL

    View Slide

  117. probably, I type
    :w
    so frequently
    and quickly. LOL

    View Slide

  118. View Slide

  119. View Slide

  120. View Slide

  121. Your APM should be high

    View Slide

  122. Slayers Boxer
    Your APM should be high

    View Slide

  123. Manually run
    ‘bundle exec rspec spec’ ?

    View Slide

  124. No. It depends.

    View Slide

  125. View Slide

  126. View Slide

  127. bundle exec rspec spec
    ruby -S rspec spec

    View Slide

  128. Bundler still need
    time to load

    View Slide

  129. When I can not use
    ‘bundle exec’ ?

    View Slide

  130. View Slide

  131. View Slide

  132. no spec_helper

    View Slide

  133. Two ways to run tests?

    View Slide

  134. View Slide

  135. View Slide

  136. ruby -S rspec spec ?

    View Slide

  137. bundle exec rspec spec ?
    ruby -S rspec spec ?

    View Slide

  138. by Gray Bernhardt

    View Slide

  139. View Slide

  140. About integration test

    View Slide

  141. RSpec +
    Capybara(webkit)

    View Slide

  142. Poltergeist looks nice
    will give it a try

    View Slide

  143. I don’t love it so far
    Also don’t hate it
    Still keep looking

    View Slide

  144. Stub as little as possible
    only do for
    Current time
    HTTP visiting
    ...

    View Slide

  145. VCR

    View Slide

  146. View Slide

  147. Use different fixture
    data in integration and
    unit tests

    View Slide

  148. Integration tests are
    not for driving
    development

    View Slide

  149. No mock or stub
    means slow
    You can use a CI
    server run it for you

    View Slide

  150. if project.open_source?

    View Slide

  151. A hosted continuous integration service for the open source community.

    View Slide

  152. else

    View Slide

  153. View Slide

  154. integrity
    • light weight
    • It built by ruby (Means you can hack!!!)
    • Works pretty well with git
    • Hook and API is weak

    View Slide

  155. View Slide

  156. Hudson and Jenkins
    • They built by JAVA
    • Heavy weight and powerful
    • a lot of plugins(git, github, emails, hipchat...)
    • Have nice API

    View Slide

  157. We really did some interesting
    things with Hudson by HUBOT

    View Slide

  158. http://terrytai.com/

    View Slide

  159. JS tests

    View Slide

  160. View Slide

  161. View Slide

  162. jasminerice gem for work with Rails asset pipeline

    View Slide

  163. jasmine-sinon

    View Slide

  164. View Slide

  165. By Ian: https://gist.github.com/4059889

    View Slide

  166. View Slide

  167. View Slide

  168. View Slide

  169. View Slide

  170. View Slide

  171. Look at me, Terry. It’s not a JS conf, ok?

    View Slide

  172. I’d better stop here

    View Slide

  173. Oh, BTW

    View Slide

  174. DHH is the hero
    in my heart

    View Slide

  175. Thank you!

    View Slide