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

时间:2008-09-27 16:11:53

标签: ruby testing rspec

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

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

./Rakefile
./lib
./lib/cushion.rb
./lib/cushion
./lib/cushion/doc.rb
./lib/cushion/db.rb
./spec
./spec/spec.opts
./spec/spec_helper.rb
./spec/db_spec.rb

14 个答案:

答案 0 :(得分:363)

或者你可以跳过rake并使用'rspec'命令:

rspec path/to/spec/file.rb

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

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

spec path/to/spec/file.rb

答案 1 :(得分:199)

原始调用:

rake spec SPEC=spec/controllers/sessions_controller_spec.rb \
          SPEC_OPTS="-e \"should log in with cookie\""

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

答案 2 :(得分:115)

这个问题很古老,但在搜索如何运行单个测试时会显示在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之间的任何数字。

希望这有帮助!

答案 3 :(得分:58)

您还可以将{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'

这里不需要耙。

答案 4 :(得分:18)

来自help(spec -h):

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

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

答案 5 :(得分:13)

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

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

例如:

ruby myclass_spec.rb

答案 6 :(得分: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

答案 7 :(得分:10)

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

  ruby -I spec spec/models/user_spec.rb

说明:

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

答案 8 :(得分:7)

运行rspec文件的全部rspec

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

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

注意:替换&#39; path_to / spec.rb&#39;与你的道路。引号可选。

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

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

答案 9 :(得分:5)

我无法让这些示例中的任何一个工作,也许是因为帖子已经过时并且命令已经改变了?

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

rspec spec / models / user_spec.rb

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

答案 10 :(得分:4)

specky.vim

答案 11 :(得分:3)

或者,看看自动测试。

在命令窗口中运行自动测试意味着只要保存它就会执行spec文件。此外,只要您运行的文件运行,它就会运行。

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

答案 12 :(得分:2)

让我们说,你正在运行测试来创建待办事项。您始终可以使用文件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

希望它能让你更加理解!

答案 13 :(得分:2)

虽然这个问题写的很多很好的答案,但没有一个使用Rspec tags方法。

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

例如,我添加标签&#34; dev&#34;值&#34;当前&#34;:

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

然后我跑

bundle exec rspec . --tag dev:current

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