如何在 RSpec 中运行单个测试/规范文件?

问题描述 投票:0回答:16

我希望能够运行单个规范文件的测试 - 例如,对于我正在编辑的一个文件。

rake spec
执行所有规范。我的项目不是 Rails 项目,所以
rake spec:doc
不起作用。

不知道这是否重要,但这是我的目录结构。

./Rakefile
./lib
./lib/垫子.rb
./lib/垫子
./lib/垫子/doc.rb
./lib/垫子/db.rb
./规格
./spec/spec.opts
./spec/spec_helper.rb
./spec/db_spec.rb
ruby testing rspec
16个回答
441
投票

或者您可以跳过 rake 并使用“rspec”命令:

bundle exec rspec path/to/spec/file.rb

就您而言,我认为只要您的 ./spec/db_spec.rb 文件包含适当的帮助程序,它应该可以正常工作。

如果您使用旧版本的 rspec,它是:

bundle exec spec path/to/spec/file.rb

213
投票

原始调用:

rake 规范 SPEC=spec/controllers/sessions_controller_spec.rb \
          SPEC_OPTS="-e \"应该使用 cookie 登录\""

现在弄清楚如何将其嵌入到您的编辑器中。


138
投票

这个问题是一个老问题,但当搜索如何运行单个测试时,它会出现在 Google 的顶部。我不知道这是否是最近添加的,但要根据规范运行单个测试,您可以执行以下操作:

rspec path/to/spec:<line number>

其中 -行号 - 是包含测试部分的行号。例如,如果您有这样的规范:

1: 
2: it "should be awesome" do
3:   foo = 3
4:   foo.should eq(3)
5: end
6:

假设它保存在spec/models/foo_spec.rb中。然后你会运行:

rspec spec/models/foo_spec.rb:2

它只会运行该规范。事实上,这个数字可以是 2 到 5 之间的任何数字。


67
投票

您还可以使用 *e*示例测试用例的实际文本

-e
!

因此:

it "shows the plane arrival time"

你可以使用

rspec path/to/spec/file.rb -e 'shows the plane arrival time'
./scripts/spec path/to/spec/file.rb -e 'shows the plane arrival time'

这里不需要耙子。


19
投票

来自帮助(spec -h):

-l, --line LINE_NUMBER           Execute example group or example at given line.
                                 (does not work for dynamically generated examples)

示例:规格spec/runner_spec.rb -l 162


17
投票

要运行所有的 rspec 文件:

rspec

注意:您必须位于项目的根目录中

运行one rspec 文件:

rspec 'path_to/spec.rb'

注意:将 'path_to/spec.rb' 替换为您的路径。引号可选。

要从一个文件运行 one rspec test

rspec 'path_to/spec.rb:7'

注意::7是测试开始的行号


13
投票

如果您将 rspec 作为插件而不是 gem 安装,那么您将不会有

spec
可执行文件。

无论如何,您所需要做的就是使用 ruby 运行该文件。 rspec 代码足够聪明,可以为您运行测试。

例如:

ruby myclass_spec.rb

12
投票

http://github.com/grosser/single_test可以让你做类似的事情..

rake spec:user          #run spec/model/user_spec.rb (searches for user*_spec.rb)
rake test:users_c       #run test/functional/users_controller_test.rb
rake spec:user:token    #run the first spec in user_spec.rb that matches /token/
rake test:user:token    #run all tests in user_test.rb that match /token/
rake test:last
rake spec:last

10
投票

Ruby 1.9.2 和 Rails 3 有一种简单的方法来运行一个规范文件:

 ruby -I 规范spec/models/user_spec.rb

说明:

  • ruby
    命令往往比
    rake
    命令更快
  • -I spec
    表示“查找文件时包含‘spec’目录”
  • spec/models/user_spec.rb
    是我们要运行的文件。

6
投票

尽管针对这个问题写了很多很棒的答案,但没有一个使用 Rspec

tags
方法。

我使用标签来运行不同文件中的一个或多个规范 - 仅那些与我当前的开发任务相关的规范。

例如,我添加标签“dev”,值为“current”:

it "creates an user", dev: :current do
  user = create(:user)
  expect(user.persisted?).to be_truthy
end

然后我就跑

bundle exec rspec . --tag dev:current

可以在单独的规格或组中设置不同的标签/值。


5
投票

我在使这些示例中的任何一个正常工作时遇到困难,可能是因为帖子很旧并且命令已更改?

经过一番探索后,我发现这个有效:

rspec 规格/模型/user_spec.rb

这将仅运行单个文件并在终端中提供有用的输出。


4
投票

斑点.vim


3
投票

或者,看看自动测试。

在命令窗口中运行自动测试意味着每当您保存规范文件时都会执行它。此外,只要运行您指定的文件,它就会运行。

例如,如果您有一个名为 person_spec.rb 的模型规范文件,以及一个名为 person.rb 的模型规范文件,那么每当您从编辑器中保存这两个文件中的任何一个时,都会执行该规范文件。


3
投票

假设您正在运行创建待办事项的测试。您始终可以使用文件 crete_spec.rb 文件运行特定的待办事项规范代码,如下所示。

      rspec/spec/features/controller/spec_file_name.rb

   Example:

   Creating  rspec spec/features/todos/create_spec.rb
   Editing   rspec spec/features/todos/edit_spec.rb
   Deleting  rspec spec/features/todos/destroy_spec.rb

如果您想在一个短片中运行所有规格。

   rspec 

如果您想在特定控制器用户中运行所有规范。

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

希望大家多多理解!


0
投票

您可以在测试文件中运行特定行

rspec spec/models/model_spec.rb:47

0
投票

tl;博士;

bundle exec rake spec:unit spec/unit/interesting_spec.rb

我想我已经迟到了,但我需要使用

rake
运行测试,而不是直接调用
spec
,因为项目中的类加载设计显然很糟糕。

© www.soinside.com 2019 - 2024. All rights reserved.