rspec如何运行单个testing?

我已经在网上find各种链接,但没有一个是最新的,并显示如何运行一个单一的testing。

我有以下文件:

/spec/controllers/groups_controller_spec.rb 

我使用哪个terminal命令来运行该规范,以及在哪个命令中运行命令?

我的gem文件:

 # 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 

spec文件

 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 ./spec/controllers/groups_controller_spec.rb:42 

其中42代表我想运行的testing线。

EDIT1:

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

编辑2:

尝试:

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

用耙子:

 rake spec SPEC=path/to/spec.rb 

(信贷去这个答案 ,去投票给他)

编辑 (感谢@ cirosantilli):要在规范内运行一个特定的场景,你必须提供匹配描述的正则expression式匹配。

 rake spec SPEC=path/to/spec.rb \ SPEC_OPTS="-e \"should be successful and return 3 items\"" 

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

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

我运行特定testing的首选方法稍有不同 – 我添加了行

  RSpec.configure do |config| config.filter_run :focus => true config.run_all_when_everything_filtered = true end 

到我的spec_helper文件。

现在,每当我想运行一个特定的testing(或上下文,或规范),我可以简单地添加标签“焦点”,并正常运行我的testing – 只有重点testing(S)将运行。 如果我删除了所有的焦点标签,那么run_all_when_everything_filtered正常运行,并运行所有的testing。

这不像命令行选项那么简单快捷 – 它要求您编辑要运行的testing的文件。 但是,我觉得它给了你更多的控制。

有很多select:

 rspec spec # All specs rspec spec/models # All specs in the models directory rspec spec/models/a_model_spec.rb # All specs in the some_model model spec rspec spec/models/a_model_spec.rb:nn # Run the spec that includes line 'nn' rspec -e"text from a test" # Runs specs that match the text rspec spec --tag focus # Runs specs that have :focus => true rspec spec --tag focus:special # Run specs that have :focus => special rspec spec --tag focus ~skip # Run tests except those with :focus => true 

@apneadiving答案是解决这个问题的一个干净的方式。 但是,现在我们在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 spec/unit/baseball_spec.rb:[1:1]或者rspec spec/unit/baseball_spec.rb:[1:1:1]rspec spec/unit/baseball_spec.rb:42 (42行testing) rspec spec/unit/baseball_spec.rb:[1:1:1]取决于testing用例是如何嵌套的。

从rspec 2开始,您可以使用以下内容:

 # in spec/spec_helper.rb RSpec.configure do |config| config.filter_run :focus => true config.run_all_when_everything_filtered = true end # in spec/any_spec.rb describe "something" do it "does something", :focus => true do # .... end end 

在导轨5中,

我用这种方式运行单个testing文件(所有的testing在一个文件中)

 rails test -n /TopicsControllerTest/ -v 

类名可以用来匹配所需文件TopicsControllerTest

我的课程class TopicsControllerTest < ActionDispatch::IntegrationTest

输出:

在这里输入图像说明

如果你想你可以调整正则expression式来匹配单个testing方法\TopicsControllerTest#test_Should_delete\

 rails test -n /TopicsControllerTest#test_Should_delete/ -v 

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

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

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

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

对于信号模型或控制器,从上面删除行号

在所有型号上运行案例

 bundle exec rspec spec/models 

在所有控制器上运行案例

 bundle exec rspec spec/controllers 

运行所有情况

  bundle exec rspec 

鉴于你在rspec 2的rails 3项目,从rails根目录:

  bundle exec rspec spec/controllers/groups_controller_spec.rb 

应该肯定工作。 我厌倦了打字,所以我创build了一个别名来缩短'bundle exec rspec'到'bersp'

'bundle exec'是这样的:它加载了你的gem文件中指定的确切的gem环境: http : //gembundler.com/

Rspec2从“spec”命令切换到“rspec”命令。

我使用这个守护gem来自动运行我的testing。 它在testing文件上创build或更新操作后执行testing。

https://github.com/guard/guard-test

或者通常可以使用以下命令运行

rspec spec / controllers / groups_controller_spec.rb

你可以做这样的事情:

  rspec/spec/features/controller/spec_file_name.rb rspec/spec/features/controller_name.rb #run all the specs in this controller 

有一个gem“ 看守 ”,它可以跟踪文件中的任何代码更改,并自动运行testing