308

我希望能够运行单个规范文件的测试——例如,对于我正在编辑的一个文件。 rake spec执行所有规范。我的项目不是 Rails 项目,所以rake spec:doc不起作用。

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

./耙文件
./lib
./lib/cushion.rb
./lib/靠垫
./lib/cushion/doc.rb
./lib/靠垫/db.rb
./规格
./spec/spec.opts
./spec/spec_helper.rb
./spec/db_spec.rb
4

15 回答 15

420

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

rspec path/to/spec/file.rb

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

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

spec path/to/spec/file.rb
于 2008-09-27T17:20:10.347 回答
207

原始调用:

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

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

于 2008-09-27T16:22:06.367 回答
134

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

rspec path/to/spec:<line number>

其中 -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 之间的任何值。

希望这可以帮助!

于 2012-07-24T21:30:12.920 回答
63

您还可以将 *e*xample 测试用例的实际文本与-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'

这里不需要耙子。

于 2011-04-15T16:37:02.747 回答
19

来自帮助(spec -h):

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

示例:规范规范/runner_spec.rb -l 162

于 2010-08-17T10:10:24.153 回答
16

要运行所有rspec 文件:rspec

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

运行一个rspec 文件:rspec 'path_to/spec.rb'

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

从一个文件运行一个rspec测试:rspec 'path_to/spec.rb:7'

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

于 2017-11-01T21:44:24.943 回答
13

如果您将 rspec 安装为插件而不是 gem,那么您将没有spec可执行文件。

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

例如:

ruby myclass_spec.rb
于 2008-09-28T20:04:38.383 回答
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
于 2009-12-15T18:29:35.497 回答
10

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

  ruby -I 规范规范/模型/user_spec.rb

解释:

  • ruby命令往往比rake命令 快
  • -I spec表示“在查找文件时包含‘spec’目录”
  • spec/models/user_spec.rb是我们要运行的文件。
于 2011-04-14T03:05:14.883 回答
5

我无法让这些示例中的任何一个工作,可能是因为帖子很旧并且命令已经改变?

经过一番摸索,我发现这是可行的:

rspec 规范/模型/user_spec.rb

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

于 2011-03-01T17:10:31.560 回答
4

斑点.vim

于 2009-01-11T06:22:07.460 回答
4

尽管对这个问题写了很多很好的答案,但没有一个使用Rspectags方法。

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

例如,我添加标签“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

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

于 2017-05-15T15:18:41.487 回答
3

或者,看看自动测试。

在命令窗口中运行 autotest 意味着无论何时保存该规范文件都会执行。此外,只要您指定的文件运行,它就会运行。

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

于 2008-10-03T09:12:30.920 回答
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 

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

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

希望能给大家更多的理解!

于 2014-12-08T10:43:46.517 回答
-1

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

rspec spec/models/model_spec.rb:47
于 2021-11-30T14:15:30.477 回答