rake rspec 测试没有 运行
rake rspec test doesn't run
我按照 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
为什么没有输出描述的测试?
您 运行 规范 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
这将 运行 规格作为文档。
题外话
当您描述 class 时,最佳做法是您应该将 class 传递给 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
我按照 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
为什么没有输出描述的测试?
您 运行 规范 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
这将 运行 规格作为文档。
题外话
当您描述 class 时,最佳做法是您应该将 class 传递给 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