我有以下文件:
/spec/controllers/groups_controller_spec.rb
我在终端中使用什么命令来运行该规范,在什么目录中运行该命令?
我的宝石文件:
# Test ENVIRONMENT GEMS
group :development, :test do
gem "autotest"
gem "rspec-rails", "~> 2.4"
gem "cucumber-rails", ">=0.3.2"
gem "webrat", ">=0.7.2"
gem 'factory_girl_rails'
gem 'email_spec'
end
规范文件:
require 'spec_helper'
describe GroupsController do
include Devise::TestHelpers
describe "GET yourgroups" do
it "should be successful and return 3 items" do
Rails.logger.info 'HAIL MARRY'
get :yourgroups, :format => :json
response.should be_success
body = JSON.parse(response.body)
body.should have(3).items # @user1 has 3 permissions to 3 groups
end
end
end
我偏爱的运行特定测试的方法略有不同——
我添加了这些行
RSpec.configure do |config|
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
到我的spec_helper文件。
现在,每当我想要运行一个特定的测试(或上下文或规范)时,我可以简单地向它添加“focus”标签,并正常运行我的测试——只有被聚焦的测试才会运行。如果我删除所有的焦点标签,run_all_when_everything_filtered就会生效,并正常运行所有测试。
它不像命令行选项那样快速和简单——它需要您为想要运行的测试编辑文件。但我觉得这能给你更多的控制。
在rails 5中,
我使用这种方式运行单个测试文件(所有测试在一个文件中)
rails test -n /TopicsControllerTest/ -v
类名可以用来匹配所需的文件TopicsControllerTest
我的类类TopicsControllerTest < ActionDispatch::IntegrationTest
输出:
如果你愿意,你可以调整正则表达式来匹配单个测试方法\TopicsControllerTest#test_Should_delete\
rails test -n /TopicsControllerTest#test_Should_delete/ -v
@ apne潜水的答案是一个整洁的解决这个问题的方法。然而,现在我们在Rspec 3.3中有了一个新方法。我们可以简单地运行rspec spec/unit/baseball_spec。Rb [#context:#it]而不是行号。从这里开始:
RSpec 3.3引入了一种识别示例的新方法[…]
例如,以下命令:
$ rspec spec/unit/baseball_spec.rb[1:2,1:4]
…将运行在spec/unit/baseball_spec.rb中定义的第一个顶级组下定义的第二个和第四个示例或组。
所以与其这样做
rspec规范/单位/ baseball_spec。第42行测试是第一个测试,我们可以简单地做
rspec规范/单位/ baseball_spec。Rb[1:1]或rspec spec/unit/baseball_spec。Rb[1:1:1]取决于测试用例的嵌套程度。