如何在rspec中运行特定的单个测试?

Sim*_*mon 4 rspec ruby-on-rails

我在网上搜索了所有内容,但似乎找不到解决方法,以下示例不起作用:

# spec/my_spec.rb
describe myText do
  it "won't work" do
    raise "never reached"
  end

  it "will work", :focus => true do
    1.should = 1
  end
end

$ rspec --tag focus spec/my_spec.rb
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

Joh*_*lla 5

通常,要执行一个规范,您可以

rspec path/to/your/spec.rb:123
Run Code Online (Sandbox Code Playgroud)

123您的规范开始的行号在哪里。

但是,您的特定示例永远无法工作,因为您有两种错别字:

1.should = 1
Run Code Online (Sandbox Code Playgroud)

应该

1.should eq 1      # deprecated to use 'should'
Run Code Online (Sandbox Code Playgroud)

因为否则您将为“ 1.should”分配“ 1”,这没有意义。

您也不能写“ describe myText”,因为myText在任何地方都没有定义。你可能是说describe 'myText'

最后,RSpec断言的首选方法是

expect(1).to eq 1  # preferred
Run Code Online (Sandbox Code Playgroud)

为了证明这项工作,我做到了:

mkdir /tmp/example
gem_home .
gem install rspec

cat spec.rb
# spec.rb
describe "example" do
  it "won't work" do
    raise "never reached"
  end

  it "will work", :focus => true do
    expect(1).to eq 1
  end
end
Run Code Online (Sandbox Code Playgroud)

并且通过了,仅执行“将工作”规范:

rspec --tag focus spec.rb
Run options: include {:focus=>true}
.

Finished in 0.0005 seconds (files took 0.05979 seconds to load)
1 example, 0 failures
Run Code Online (Sandbox Code Playgroud)