Eu tenho o seguinte arquivo:
/spec/controllers/groups_controller_spec.rb
Qual comando no terminal eu uso para executar exatamente essa especificação e em qual diretório eu executo o comando?
Meu arquivo gem:
# Test ENVIRONMENT GEMS
group :development, :test do
gem "autotest"
gem "rspec-rails", "~> 2.4"
gem "cucumber-rails", ">=0.3.2"
gem "webrat", ">=0.7.2"
gem 'factory_girl_rails'
gem 'email_spec'
end
Arquivo de especificação:
require 'spec_helper'
describe GroupsController do
include Devise::TestHelpers
describe "GET yourgroups" do
it "should be successful and return 3 items" do
Rails.logger.info 'HAIL MARRY'
get :yourgroups, :format => :json
response.should be_success
body = JSON.parse(response.body)
body.should have(3).items # @user1 has 3 permissions to 3 groups
end
end
end
ruby-on-rails
ruby
ruby-on-rails-3
rspec
Um aprendiz
fonte
fonte
bundle exec rspec spec --help
dar-lhe-ei a resposta:Respostas:
Não sei quanto tempo isso está disponível, mas há uma configuração de Rspec para filtragem de execução - agora você pode adicioná-lo ao seu
spec_helper.rb
:E adicione uma marca de foco ao
it
,context
oudescribe
para executar apenas esse bloco:Documentação do RSpec:
https://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration#filter_run_when_matching-instance_method
fonte
rspec
comandos para executar a especificação com o parâmetro apropriado para indicar qual é o #Normalmente eu faço:
Onde
42
representa a linha do teste que eu quero executar.EDIT1:
Você também pode usar tags. Veja aqui .
EDIT 2:
Experimentar:
fonte
rspec
falhou porque a versão no seu sistema é mais recente que a do seu gemfile.Com Rake:
(O crédito vai para esta resposta . Vá votar nele.)
EDIT (graças a @cirosantilli): para executar um cenário específico dentro da especificação, você deve fornecer uma correspondência de padrão de expressão regular que corresponda à descrição.
fonte
SPEC=path/to/spec.rb:42
para executar o teste no número de linha especificado, embora pareça que todos osit_behaves_like
testes também serão executados (bug?).Você pode passar uma regex para o comando spec, que executará apenas
it
blocos correspondentes ao nome que você fornecer.Atualização 2019: Rspec2 mudou do comando 'spec' para o comando 'rspec'.
fonte
do
após umit
,context
oudescribe
declaração.Existem muitas opções:
fonte
Meu método preferido para executar testes específicos é um pouco diferente - adicionei as linhas
Para o meu arquivo spec_helper.
Agora, sempre que eu quiser executar um teste específico (ou contexto ou especificação), posso simplesmente adicionar a tag "focus" a ele e executar meu teste normalmente - somente os testes focados serão executados. Se eu remover todas as tags de foco, ele
run_all_when_everything_filtered
inicia e executa todos os testes normalmente.Não é tão rápido e fácil quanto as opções da linha de comando - exige que você edite o arquivo para o teste que deseja executar. Mas me dá muito mais controle, eu sinto.
fonte
A resposta @apneadiving é uma maneira elegante de resolver isso. No entanto, agora temos um novo método no Rspec 3.3. Podemos simplesmente executar em
rspec spec/unit/baseball_spec.rb[#context:#it]
vez de usar um número de linha. Retirado daqui:Portanto, em vez de fazer
rspec spec/unit/baseball_spec.rb:42
onde (teste na linha 42) é o primeiro teste, podemos simplesmente fazerrspec spec/unit/baseball_spec.rb[1:1]
ourspec spec/unit/baseball_spec.rb[1:1:1]
dependendo de quão aninhado está o caso de teste.fonte
Nos trilhos 5,
Eu usei esse caminho para executar um único arquivo de teste (todos os testes em um arquivo)
O nome da classe pode ser usado para corresponder ao arquivo desejado
TopicsControllerTest
Minha classe
class TopicsControllerTest < ActionDispatch::IntegrationTest
Resultado :
Se você quiser, pode ajustar o regex para corresponder ao método de teste único
\TopicsControllerTest#test_Should_delete\
fonte
Para o modelo, ele será executado apenas na linha número 5
Para o controlador: ele será executado apenas na linha número 5
Para o modelo de sinal ou controlador, remova o número da linha acima
Para executar o caso em todos os modelos
Para executar o caso em todos os controladores
Para executar todos os casos
fonte
Execute os comandos do diretório raiz do seu projeto:
fonte
começando com rspec 2, você pode usar o seguinte:
fonte
Como você está em um projeto do rails 3 com o rspec 2, no diretório raiz do rails:
definitivamente deve funcionar. cansei de digitar isso, então criei um alias para encurtar 'bundle exec rspec' para 'bersp'
'bundle exec' é para que ele carregue o ambiente exato da gema especificado no seu arquivo gema: http://gembundler.com/
Rspec2 mudou do comando 'spec' para o comando 'rspec'.
fonte
Eu uso essa jóia de guarda para executar automaticamente meu teste. Ele executa o teste após criar ou atualizar operações no arquivo de teste.
https://github.com/guard/guard-test
ou geralmente você pode executar usando o seguinte comando
rspec spec / controllers / groups_controller_spec.rb
fonte
Você pode fazer algo assim:
fonte
Você pode usar
O número da linha deve ser o número da linha 'descreva' ou 'it', para que ele execute os testes presentes naquele bloco específico. em vez disso, executará todas as linhas próximas a line_number.
Além disso, você pode criar um bloco com nome personalizado e, em seguida, pode executar apenas esses blocos.
fonte
Outro erro comum é ainda ter ou atualizar um aplicativo Rails mais antigo para o Rails 5+ e colocar
require 'spec_helper'
no topo de cada arquivo de teste. Isso deve ser alterado pararequire 'rails_helper'
. Se você estiver vendo um comportamento diferente entre a tarefa rake (rake spec
) e quando você executa uma única especificação (rspec path/to/spec.rb
), esse é um motivo comuma melhor solução é
1) verifique se você está usando
require 'rails_helper'
na parte superior de cada um dos seus arquivos de especificação - não no estilo antigorequire 'spec_helper'
2) use orake spec SPEC=path/to/spec.rb
sintaxeo estilo mais antigo que
rspec path/to/spec.rb
eu acho que deveria ser considerado fora de moda pela comunidade neste momento em 2020 (mas é claro que você fará com que funcione, outras considerações à parte)fonte