如何在RSpec中运行单个testing/ spec文件?

例如,我希望能够运行一个spec文件的testing – 对于我正在编辑的一个文件。 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

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

 rspec path/to/spec/file.rb 

在你的情况下,我想只要你的./spec/db_spec.rb文件包含适当的帮手,它应该工作正常。

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

 spec path/to/spec/file.rb 

原始调用:

 rake spec SPEC = spec / controllers / sessions_controller_spec.rb \
           SPEC_OPTS =“ -  e \”应该使用cookielogin“”

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

这个问题是旧的,但在search如何运行单个testing时,它显示在Google的顶部。 我不知道这是否是最近的新增function,但要运行一个testing,您可以执行以下操作:

 rspec path/to/spec:<line number> 

其中-line number-是包含部分testing的行号。 例如,如果你有一个像这样的规格:

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

希望这可以帮助!

您也可以使用-e * xampletesting用例的实际文本!

因此对于:

 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 -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安装为插件而不是gem,那么您将不会拥有spec可执行文件。

无论如何,你所要做的就是使用ruby来运行这个文件。 rspec代码非常聪明,可以为您运行testing。

例如:

 ruby myclass_spec.rb 

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 

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是我们想要运行的文件。

我无法得到任何这些例子的工作,也许是因为这个职位是旧的,命令已经改变?

经过一番摸索,我发现这个作品:

rspec spec / models / user_spec.rb

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

specky.vim

或者,看看自动testing。

在命令窗口中运行自动testing意味着只要保存spec文件就会被执行。 而且,只要您正在运行的文件正在运行,它就会运行。

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

比方说,你正在运行testing创build待办事项。 您始终可以使用文件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 

希望它给你更多的理解!

尽pipe这个问题写了很多很好的答案,但是没有一个使用Rspec tags方法。

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

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

 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文件: rspec 'path_to/spec.rb'

注意:用你的pathreplace“path_to / spec.rb”。 引号可选。

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

注意::7是testing开始的行号