我有以下文件:

/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就会生效,并正常运行所有测试。

它不像命令行选项那样快速和简单——它需要您为想要运行的测试编辑文件。但我觉得这能给你更多的控制。

其他回答

您可以将一个正则表达式传递给spec命令,该命令将只运行与您提供的名称匹配的块。

spec path/to/my_spec.rb -e "should be the correct answer"

2019更新:Rspec2从'spec'命令切换到'rspec'命令。

对于单个示例的规格文件,您需要在最后添加行号,例如

rspec spec/controllers/api/v1/card_list_controller_spec.rb:35

对于单个文件,您可以指定您的文件路径,例如

rspec spec/controllers/api/v1/card_list_controller_spec.rb

对于spec文件夹中的整个Rspec示例,您可以尝试使用此命令

bundle exec rspec spec

你可以使用

 rspec spec/controllers/groups_controller_spec.rb:<line_number>

行号应该是“描述”或“it”行的行号,这样它将运行该特定块中的测试。 相反,它将执行line_number旁边的所有行。

此外,您可以创建自定义名称的块,然后只能执行这些块。

对于模型,它将只在第5行上运行case

bundle exec rspec spec/models/user_spec.rb:5

对于控制器:它将只在第5行上运行case

bundle exec rspec spec/controllers/users_controller_spec.rb:5

对于信号模型或控制器,从上面去掉行号

在所有模型上运行case

bundle exec rspec spec/models

在所有控制器上运行case

bundle exec rspec spec/controllers

运行所有案例

 bundle exec rspec 

通常我会这样做:

rspec ./spec/controllers/groups_controller_spec.rb:42

其中42表示我要运行的测试行。

你也可以使用标签。在这里看到的。

使用bundle exec:

bundle exec rspec ./spec/controllers/groups_controller_spec.rb:42