Como executo apenas testes específicos no Rspec?


159

Eu acho que existe uma maneira de executar apenas testes com um determinado rótulo. Alguém sabe?

Respostas:


186

Não é fácil encontrar a documentação, mas você pode marcar exemplos com um hash. Por exemplo.

# spec/my_spec.rb
describe SomeContext do
  it "won't run this" do
    raise "never reached"
  end

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

$ rspec --tag focus spec/my_spec.rb

Mais informações no GitHub . (qualquer pessoa com um link melhor, por favor, informe)

(atualizar)

O RSpec agora está soberbamente documentado aqui . Veja a seção de opções --tag para detalhes.

A partir da v2.6, esse tipo de tag pode ser expresso ainda mais simplesmente incluindo a opção de configuração treat_symbols_as_metadata_keys_with_true_values, que permite:

describe "Awesome feature", :awesome do

onde :awesomeé tratado como se fosse :awesome => true.

Consulte também esta resposta para saber como configurar o RSpec para executar automaticamente testes 'focados'. Isso funciona especialmente bem com o Guard .


Portanto, você não precisa procurar, o link direto para a sugestão da zetetic está aqui (para Rspec 2.12) relishapp.com/rspec/rspec-core/v/2-12/docs/command-line/…
tir38

Adicionamos uma especificação ao nosso conjunto para garantir que o código nunca seja mesclado com o foco: true ainda no controle de origem. gist.github.com/jwg2s/7361603
jwg2s

@ jwg2s Eu uso um gancho git para bloquear confirmações :focus, o que também impede que indesejáveis ​​como 'binding.pry , console.log`, etc. entrem na base de código.
Zetetic #

1
@Otheus não, eu sou apenas um fã :) Eu realmente gosto do que eles fizeram no Relish, mas a SO acabou de lançar seu próprio recurso de documentação, para que possamos ver alguma competição.
Zetetic

1
Talvez você possa me indicar uma documentação que realmente descreve o uso e o comportamento real do rspecprograma :) Porque o documento Relish não.
Otheus

111

Você pode executar todos os testes que contêm uma sequência específica com a opção --example (ou -e) :

rspec spec/models/user_spec.rb -e "User is admin"

Eu uso esse mais.


89

No seu spec_helper.rb:

RSpec.configure do |config|
    config.filter_run focus: true
    config.run_all_when_everything_filtered = true
end

e depois nas suas especificações:

it 'can do so and so', focus: true do
    # This is the only test that will run
end

Você também pode focar testes com 'fit' ou excluir com 'xit', assim:

fit 'can do so and so' do
    # This is the only test that will run
end

1
Em rspec 3.5, que é config.filter_run_when_matchinge que poderia trabalhar apenas adicionando :focusao exemplo
Ali Ghanavatian

4
Se 'focus: true' for acidentalmente confirmado, seu IC estará passando, apesar de não executar a maioria dos testes.
Zach

67

Como alternativa, você pode passar o número da linha: rspec spec/my_spec.rb:75- o número da linha pode apontar para uma única especificação ou um bloco de contexto / descrição (executando todas as especificações nesse bloco)


50

Você também pode encadear vários números de linhas junto com dois pontos:

$ rspec ./spec/models/company_spec.rb:81:82:83:103

Resultado:

Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}

Isso é tão dourado! --️
iGbanam



3

Além disso, você pode executar especificações que, focus: truepor padrão,

spec / spec_helper.rb

RSpec.configure do |c|
  c.filter_run focus: true
  c.run_all_when_everything_filtered = true
end

Então simplesmente execute

$ rspec

e apenas teste focado será executado

então quando você remover focus: truetodos os testes, execute novamente

Mais informações: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters


Está spec/spec_helper.rbsempre incluído? Ou apenas se nenhuma opção for dada? Por que os módulos de teste possuem require 'spec_helber'e não possuem o código acima eliminam a possibilidade de executar um único teste especificando o arquivo? Não consigo encontrar nenhuma documentação sobre isso.
Otheus

1
spec_helper.rbé sempre incluído se você tiver --require spec_helperna .rspecraiz do projeto.
Kris

0

Você pode correr como rspec spec/models/user_spec.rb -e "SomeContext won't run this".

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.