ChatGPT解决这个技术问题 Extra ChatGPT

如何在 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

d
duhaime

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

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

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

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

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

使用新的 rspec,您必须使用“rspec path/to/file.rb”
也许我做错了,但我必须做“bundle exec rspec path/to/spec/file.rb”
如果您使用 Rails,您可能希望使用 Rake 执行规范,以确保您从空白数据库开始。
@andrhamm,您只是在捆绑包的上下文中运行规范。如果您不使用 gemsets(默认情况下与 rvm 一起提供,并且是 rbenv 的单独扩展),这是必要的
如果您只想运行一个测试,请将测试开始的行号附加到文件中。示例:rspec path/to/spec/file.rb:455
J
John Bachir

原始调用:

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

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


正如我所说,我不在轨道上,所以没有控制器。但是,是的,“rake spec SPEC=file.rb”有效。谢谢!我现在正在处理 Emacs 集成。
如果可以避免,请不要启动 rakefile。它需要很长时间
我更改了接受的答案,但 SPEC_OPTS 参数对我也有帮助。
这就是我所说的好答案。为什么没有标记为“答案”?
直接运行 spec 通常是最好的选择,但是很多时候你必须为自定义 Rakefile 中的各种魔法位运行 rake
j
juanpaco

这个问题是一个老问题,但在搜索如何运行单个测试时,它会出现在 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 之间的任何值。

希望这可以帮助!


这很有趣,尽管一旦您将规范重构为多个文件,它看起来就不起作用(即您只能将它与主 _spec.rb 文件一起使用,但如果其中没有您的示例,它将不会运行. 另外,如果您尝试将它用于不是顶级规范文件的文件,那也不会运行任何东西。)
我不太明白。 “顶级规范文件”是什么意思?我的测试套件几乎总是分为多个文件,我总是可以使用这种方法在单个文件中调用测试。您的意思是拥有一个require您的其他规范文件的文件吗?
我可以在 spec/ 目录下的任何级别的任何文件上使用它。我相信 Trejkaz 是不正确的。
这太棒了,应该在上面!
我一直使用它,但有时您想从一个文件运行多个测试。然后您可以像这样键入所有示例:rspec spec/models/foo_spec.rb:2:12:49
M
Michael Durrant

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

这里不需要耙子。


这就是您所需要的,除了“spec”应替换为“rspec”,如@bandhunt 所述
b
boblin

来自帮助(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


在较新的 Rspec 版本中,您根据文档和流行的答案在冒号 : 后附加行号。
n
nflauria

要运行 所有 rspec 文件:rspec

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

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

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

要从一个文件运行 one rspec testrspec 'path_to/spec.rb:7'

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


O
Orion Edwards

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

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

例如:

ruby myclass_spec.rb

是否可以像这样在文件中运行一项测试?
Z
Zeke

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

看来 gem 没有得到维护,最后一次提交是 5 年前!
j
joelparkerhenderson

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

ruby -I spec spec/models/user_spec.rb

解释:

ruby 命令往往比 rake 命令快

-I spec 表示“在查找文件时包含‘spec’目录”

spec/models/user_spec.rb 是我们要运行的文件。


您可以使用一些额外的选项在该文件中运行一项测试吗?
G
Greg Hemphill

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

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

rspec 规范/模型/user_spec.rb

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


在接受的答案的评论中提到了这一点。是的,我认为这篇文章太老了,命令名称已经改变。
V
Victor BV

尽管对这个问题写了很多很好的答案,但没有一个使用 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

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


佚名

斑点.vim


f
fatgeekuk

或者,看看自动测试。

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

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


P
Prabhakar Undurthi

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

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


K
Khaireddine Hamdi

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

rspec spec/models/model_spec.rb:47

差不多 10 年前就提供了同样的答案。