rake rspec测试没有运行

时间:2015-03-10 20:39:07

标签: ruby rspec rake

我按照rspec页面中的介绍,然后在我的rakefile中添加了一个测试任务,以进行简单的文件读取测试:

#Rakefile
task default: %w[test]

task :test do
  ruby "spec/file_reader_spec.rb"
end

#spec/file_reader_spec.rb
require './lib/filereader'
require 'rspec'

RSpec.describe "file_reader" do
    context "with sample test input file" do

        it "reads a file and prints its contents" do
            @file_reader = FileReader.new
            expect(@file_reader.input_file('./files/test_input.txt')).to eq ('file text')
        end
    end
end

但是当我运行rake命令时,它什么也没输出,只有一行显示spec文件已被执行:

$rake
/Users/mrisoli/.rvm/rubies/ruby-2.1.1/bin/ruby spec/file_reader_spec.rb

为什么不输出描述的测试?

1 个答案:

答案 0 :(得分:2)

您正在使用ruby而不是rspec运行规范。这就是为什么你没有看到任何输出,你的测试将像普通的ruby脚本一样运行。

将您的Rakefile改为运行rspec

begin
  require 'rspec/core/rake_task'

  RSpec::Core::RakeTask.new(:spec)

  task :default => :spec
rescue LoadError
  puts "RSpec is not installed!"
end

更多详情here

<强>更新

如果要将参数传递给rspec,可以这样做:

RSpec::Core::RakeTask.new(:spec) do |t|
  t.rspec_opts = "--format documentation"
end

这将以规格格式运行规范。


非主题

当您描述一个类时,最佳实践表明您应该将类​​传递给describe方法而不是字符串。这样你的代码看起来更干净,rspec将自己实例化它(该实例将以subject形式提供)。

例如:

RSpec.describe FileReader do
  context "with sample test input file" do
    it "reads a file and prints its contents" do
        expect(subject.input_file('./files/test_input.txt')).to eq ('file text')
    end
  end
end