rspec 1.x -> 2.0 の変更点
DESCRIPTION
RSpec 1.x -> 2.0 の変更点TRANSCRIPT
![Page 1: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/1.jpg)
Chiew Chung @theworldinunion Edward Middleton @e14n
![Page 2: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/2.jpg)
# in spec/calculator_spec.rb describe Calculator, "add" do it "returns the sum of its arguments" do Calculator.new.add(1, 2).should eq(3) end end
![Page 3: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/3.jpg)
$ rspec spec/calculator_spec.rb ./spec/calculator_spec.rb:1: uninitialized constant Calculator
# in lib/calculator.rb class Calculator def add(a,b) a + b end end
![Page 4: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/4.jpg)
# in spec/calculator_spec.rb require “calculator” describe Calculator, "add" do it "returns the sum of its arguments" do Calculator.new.add(1, 2).should eq(3) end end
$ rspec spec/calculator_spec.rb .
Finished in 0.000315 seconds 1 example, 0 failures
![Page 5: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/5.jpg)
![Page 6: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/6.jpg)
Rspec-core (ランナー、フォーマッター,…)
Rspec-expectations (Should, matchers,…)
Rspec-mocks (mock, stub,…)
Rspec Rspec-Rails
![Page 7: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/7.jpg)
![Page 8: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/8.jpg)
rspec ./spec Rspec 2.0 “rspec”
spec _1.3.1_ ./spec Rspec 1.0 “spec”
![Page 9: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/9.jpg)
RSpec::Core::RakeTask.new(:rcov) do |t| t.rcov_opts = %q[--exclude "spec"] end
'rspec/core/rake_task'
![Page 10: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/10.jpg)
bundle exec autotest
もしくはbundler使ってる場合
rspec ‒configure autotest
./autotest/discover.rbを作成される
autotest
![Page 11: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/11.jpg)
RSpec.configure do |c| # ....
end
spec/spec_helper.rbの設定ファイル
command line ./.rspec ~/.rspec
優先順:
![Page 12: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/12.jpg)
describe "something" do context "in some context" do it "does something" do # ... end end end
もちろんnestedの場合は問題ないです
![Page 13: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/13.jpg)
![Page 14: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/14.jpg)
![Page 15: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/15.jpg)
# in spec/spec_helper.rb RSpec.configure do |c| c.filter_run :focus => true end
# in any spec file describe "something" do it "does something", :focus => true do # .... end end
![Page 16: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/16.jpg)
RSpec.configure do |c| c.filter_run :focus => true c.run_all_when_everything_filtered = true end
:focus => trueのテストは一個もないときに、全てのテストを走らせる。
すなわち、時々いくつかのテストに”focus”したいときに、”focus”のタグ を追加するだけで、”focus”のタグを全部外したら、何も変更せずまた 全てのテストを走らせてくれる。
![Page 17: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/17.jpg)
# in spec/spec_helper.rb RSpec.configure do |c| c.exclusion_filter = { :ruby => lambda {|version| !(RUBY_VERSION.to_s =~ /^#{version.to_s}/) }} end
# in any spec file describe "something" do it "does something", :ruby => 1.8 do # .... end
it "does something", :ruby => 1.9 do # .... end end
たとえば、Ruby 1.8 と Ruby 1.9のテストが違ってくるとき
![Page 18: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/18.jpg)
![Page 19: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/19.jpg)
![Page 20: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/20.jpg)
actual.should == expected # object equality actual.should equal(expected) # object identity
Rspec 1.x , RSpec 2.0
actual.should eq(expected) # object equality actual.should be(expected) # object identity
RSpec 2.0のみ
![Page 21: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/21.jpg)
![Page 22: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/22.jpg)
def eat_cheese simple_matcher("eat cheese") do |actual| actual.eat?(:cheese) end end
旧
RSpec::Matchers.define :eat_cheese do match do |actual| actual.eat?(:cheese) end end
新
![Page 23: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/23.jpg)
RSpec::Matchers.define :eat_cheese do match do |actual| actual.should eat?(:cheese) end end
RSpec::Matchers.define :eat_cheese do include MyCheesyAssertions match_unless_raises Test::Unit::AssertionFailedError do |actual| assert_eats_chesse actual end end
Rspec::Matchers.defineを使おう
![Page 24: RSpec 1.x -> 2.0 の変更点](https://reader033.vdocuments.net/reader033/viewer/2022051014/54b718eb4a7959177f8b4569/html5/thumbnails/24.jpg)