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

我想能够运行一个单一的规范文件的测试—例如,我正在编辑的一个文件。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
253774 次浏览

原始调用:

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

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

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

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

在你的情况下,我认为只要你的。/spec/db_spec。Rb文件包括适当的帮助,它应该工作良好。

如果你正在使用rspec的旧版本,它是:

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

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

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

例如:

ruby myclass_spec.rb

或者,看看autotest。

在命令窗口中运行autotest意味着在保存规范文件时将执行它。而且,只要您指定的文件运行,它就会运行。

例如,如果您有一个名为person_spec的模型规范文件。Rb,和一个模型文件,它被指定为person。Rb,那么当您从编辑器中保存这些文件时,规范文件将被执行。

specky.vim

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

从帮助(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

我有麻烦得到这些例子中的任何一个工作,也许是因为帖子是旧的,命令已经改变了?

经过一番调查,我发现这是可行的:

rspec规范/模型/ user_spec.rb

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

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

ruby -I spec spec/models/user_spec.rb

解释:

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

你也可以使用*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'

这里不需要耙子。

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

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之间的任何数字。

希望这能有所帮助!

假设,您正在运行创建todo的测试。您总是可以使用文件crete_spec运行特定的todo规范代码。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

希望它能给你更多的理解!

虽然这个问题有很多很好的答案,但没有一个使用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

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

运行rspec文件的所有: rspec

注意:你必须在项目的根目录下

运行一个 rspec文件

注意:替换'path_to/spec。跟着你的路走。可选引号。

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

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

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

rspec spec/models/model_spec.rb:47