Eu acho que existe uma maneira de executar apenas testes com um determinado rótulo. Alguém sabe?
Eu acho que existe uma maneira de executar apenas testes com um determinado rótulo. Alguém sabe?
Respostas:
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 .
:focus, o que também impede que indesejáveis como 'binding.pry , console.log`, etc. entrem na base de código.
rspecprograma :) Porque o documento Relish não.
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.
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
config.filter_run_when_matchinge que poderia trabalhar apenas adicionando :focusao exemplo
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]}}
A partir de RSpec 2.4 (eu acho) você pode preceder um fou xpara it, specify, describee context:
fit 'run only this example' do ... end
xit 'do not run this example' do ... end
http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#fit-class_method http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#xit-class_method
Certifique-se de ter config.filter_run focus: truee config.run_all_when_everything_filtered = trueno seu spec_helper.rb.
Nas versões mais recentes do RSpec, é ainda mais fácil configurar o suporte fit:
# spec_helper.rb
# PREFERRED
RSpec.configure do |c|
c.filter_run_when_matching :focus
end
# DEPRECATED
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
Vejo:
https://relishapp.com/rspec/rspec-core/docs/filtering/filter-run-when-matching
https://relishapp.com/rspec/rspec-core/v/3-7/docs/configuration/run-all-when-everything-filtered
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
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.
spec_helper.rbé sempre incluído se você tiver --require spec_helperna .rspecraiz do projeto.
Você pode correr como rspec spec/models/user_spec.rb -e "SomeContext won't run this".