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.
rspec
programa :) 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_matching
e que poderia trabalhar apenas adicionando :focus
ao 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 f
ou x
para it
, specify
, describe
e 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: true
e config.run_all_when_everything_filtered = true
no 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: true
por 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: true
todos os testes, execute novamente
Mais informações: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters
spec/spec_helper.rb
sempre 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_helper
na .rspec
raiz do projeto.
Você pode correr como rspec spec/models/user_spec.rb -e "SomeContext won't run this"
.