guard / guard-rspec

Guard::RSpec automatically run your specs (much like autotest)

Home Page:https://rubygems.org/gems/guard-rspec

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Using RSpec 3 in development

907th opened this issue · comments

While doing #254 review I was thinking about usage of different RSpec versions in guard-rspec development process.

I found that guard-rspec don't have development dependency on particular RSpec version and 2.14 is used by default.

I added

# guard-rspec.gemspec
s.add_development_dependency 'rspec', '= 3.0.0.beta2'

and found that our test collection is not ready for RSpec 3

Finished in 0.13378 seconds
106 examples, 6 failures

Failures:

  1) Guard::RSpec::Formatter::TEMPORARY_FILE_PATH is absolute path
     Failure/Error: expect(Pathname.new(temporary_file_path).absolute?).to be_true
     NoMethodError:
       undefined method `true?' for true:TrueClass
     # ./spec/lib/guard/rspec/formatter_spec.rb:9:in `block (3 levels) in <top (required)>'

  2) Guard::RSpec::Formatter#dump_summary with only success notifies success
     Failure/Error: expect(result).to match /^3 examples, 0 failures in 123\.0 seconds\n$/
       expected "" to match /^3 examples, 0 failures in 123\.0 seconds\n$/
       Diff:
       @@ -1,2 +1,2 @@
       -/^3 examples, 0 failures in 123\.0 seconds\n$/
       +""

     # ./spec/lib/guard/rspec/formatter_spec.rb:111:in `block (4 levels) in <top (required)>'

  3) Guard::RSpec::Formatter#dump_summary without stubbed IO creates temporary file and and writes to it
     Failure/Error: expect(FileUtils).to receive(:mkdir_p).with(File.dirname(temporary_file_path)) {}
       (FileUtils).mkdir_p("/home/laise/Work/Contrib/guard-rspec/tmp")
           expected: 1 time with arguments: ("/home/laise/Work/Contrib/guard-rspec/tmp")
           received: 0 times with arguments: ("/home/laise/Work/Contrib/guard-rspec/tmp")
     # ./spec/lib/guard/rspec/formatter_spec.rb:36:in `block (4 levels) in <top (required)>'

  4) Guard::RSpec::Formatter#dump_summary with failures writes summary line and failed location in tmp dir
     Failure/Error: expect(result).to match /^3 examples, 1 failures in 123\.0 seconds\n#{spec_filename}\n$/
       expected "" to match /^3 examples, 1 failures in 123\.0 seconds\nfailed_location_spec.rb\n$/
       Diff:
       @@ -1,2 +1,2 @@
       -/^3 examples, 1 failures in 123\.0 seconds\nfailed_location_spec.rb\n$/
       +""

     # ./spec/lib/guard/rspec/formatter_spec.rb:54:in `block (4 levels) in <top (required)>'

  5) Guard::RSpec::Formatter#dump_summary with failures writes only uniq filenames out
     Failure/Error: expect(result).to match /^3 examples, 1 failures in 123\.0 seconds\n#{spec_filename}\n$/
       expected "" to match /^3 examples, 1 failures in 123\.0 seconds\nfailed_location_spec.rb\n$/
       Diff:
       @@ -1,2 +1,2 @@
       -/^3 examples, 1 failures in 123\.0 seconds\nfailed_location_spec.rb\n$/
       +""

     # ./spec/lib/guard/rspec/formatter_spec.rb:60:in `block (4 levels) in <top (required)>'

  6) Guard::RSpec::Formatter#dump_summary with pending notifies pending too
     Failure/Error: expect(result).to match /^3 examples, 0 failures \(1 pending\) in 123\.0 seconds\n$/
       expected "" to match /^3 examples, 0 failures \(1 pending\) in 123\.0 seconds\n$/
       Diff:
       @@ -1,2 +1,2 @@
       -/^3 examples, 0 failures \(1 pending\) in 123\.0 seconds\n$/
       +""

     # ./spec/lib/guard/rspec/formatter_spec.rb:118:in `block (4 levels) in <top (required)>'

Failed examples:

rspec ./spec/lib/guard/rspec/formatter_spec.rb:6 # Guard::RSpec::Formatter::TEMPORARY_FILE_PATH is absolute path
rspec ./spec/lib/guard/rspec/formatter_spec.rb:109 # Guard::RSpec::Formatter#dump_summary with only success notifies success
rspec ./spec/lib/guard/rspec/formatter_spec.rb:34 # Guard::RSpec::Formatter#dump_summary without stubbed IO creates temporary file and and writes to it
rspec ./spec/lib/guard/rspec/formatter_spec.rb:51 # Guard::RSpec::Formatter#dump_summary with failures writes summary line and failed location in tmp dir
rspec ./spec/lib/guard/rspec/formatter_spec.rb:57 # Guard::RSpec::Formatter#dump_summary with failures writes only uniq filenames out
rspec ./spec/lib/guard/rspec/formatter_spec.rb:116 # Guard::RSpec::Formatter#dump_summary with pending notifies pending too

If we want to support both RSpec 2.14 and RSpec 3, we should run tests on both versions I think. What is better way to achieve that?

CC @thibaudgg

I would use multiple Gemfile and add them to the travis build matrix. Something like:

language: ruby
bundler_args: --without tool
rvm:
  - 1.9.3
  - 2.0.0
  - 2.1.0
  - jruby
  - rbx
gemfile:
  - gemfiles/Gemfile.rspec2
  - gemfiles/Gemfile.rspec3
matrix:
  allow_failures:
    - rvm: jruby
    - rvm: rbx
notifications:
  recipients:
    - thibaud@thibaud.gg
    - # add your email here?

Good idea btw! 👍

@thibaudgg I have fixed tests for RSpec 3.0 and added separate Gemfiles to Travis CI like you've suggested.

👌 perfect, thanks!