Como você executar um arquivo único teste / spec em RSpec?
Pergunta
Eu quero ser capaz de executar testes de um único arquivo de especificações - para o arquivo que eu estou editando, por exemplo. rake spec
executa todas as especificações. Meu projeto não é um projeto Rails, então rake spec:doc
não funciona.
Não sei se isso importa, mas aqui é a minha estrutura de diretório.
./Rakefile ./lib ./lib/cushion.rb ./lib/cushion ./lib/cushion/doc.rb ./lib/cushion/db.rb ./spec ./spec/spec.opts ./spec/spec_helper.rb ./spec/db_spec.rb
Solução
Ou você pode pular ancinho e usar o comando 'rspec':
rspec path/to/spec/file.rb
No seu caso eu acho que enquanto seu arquivo ./spec/db_spec.rb inclui os auxiliares apropriados, ele deve funcionar bem.
Se você estiver usando uma versão mais antiga do rspec é:
spec path/to/spec/file.rb
Outras dicas
A invocação cru:
rake spec SPEC=spec/controllers/sessions_controller_spec.rb \ SPEC_OPTS="-e \"should log in with cookie\""
Agora, descobrir como incorporar isso em seu editor.
Esta questão é antiga, mas mostra-se no topo do Google na busca de como executar um único teste. Eu não sei se é uma adição recente, mas para executar um único teste a partir de uma especificação que você pode fazer o seguinte:
rspec path/to/spec:<line number>
onde número- -line é um número de linha que contém parte de seu teste. Por exemplo, se você tivesse uma especificação como:
1:
2: it "should be awesome" do
3: foo = 3
4: foo.should eq(3)
5: end
6:
Vamos dizer que ele é salvo em especificação / modelos / foo_spec.rb. Então você teria que executar:
rspec spec/models/foo_spec.rb:2
e que seria apenas executar que um spec. Na verdade, esse número pode ser qualquer coisa de 2 a 5.
Espero que isso ajude!
Você também pode usar o texto real do * e * caso de teste xample com -e
!
Assim, para:
it "shows the plane arrival time"
Você pode usar
rspec path/to/spec/file.rb -e 'shows the plane arrival time'
./scripts/spec path/to/spec/file.rb -e 'shows the plane arrival time'
Não há necessidade de ancinho aqui.
de ajuda (especificação -h):
-l, --line LINE_NUMBER Execute example group or example at given line.
(does not work for dynamically generated examples)
Exemplo: especificação spec / runner_spec.rb -l 162
Se você instalou rspec como um plugin e não como uma jóia, então você não vai ter o executável spec
.
De qualquer forma, Tudo que você precisa fazer é executar o arquivo usando Ruby. O código rspec é suficiente inteligente para executar os testes para você.
por exemplo:
ruby myclass_spec.rb
http://github.com/grosser/single_test permite fazer coisas como ..
rake spec:user #run spec/model/user_spec.rb (searches for user*_spec.rb)
rake test:users_c #run test/functional/users_controller_test.rb
rake spec:user:token #run the first spec in user_spec.rb that matches /token/
rake test:user:token #run all tests in user_test.rb that match /token/
rake test:last
rake spec:last
Rubi 1.9.2 e Rails 3 têm uma maneira fácil de executar um arquivo spec:
ruby -I spec spec/models/user_spec.rb
Explicação:
- comando
ruby
tende a ser mais rápido do que o comandorake
- meios
-I spec
"incluir o diretório 'especificação' quando se olha para os arquivos" -
spec/models/user_spec.rb
é o arquivo que deseja executar.
Para executar todas de seus arquivos rspec: rspec
Nota: Você deve estar na raiz do seu projeto
Para executar um arquivo rspec: rspec 'path_to/spec.rb'
Nota: Substitua 'path_to / spec.rb' com o seu caminho. Aspas opcional.
Para executar um rspec test de um arquivo: rspec 'path_to/spec.rb:7'
Nota:: 7 é o número da linha onde o teste começa
Eu estava tendo problemas para obter qualquer um destes exemplos para trabalho, talvez porque o post é antigo e os comandos mudaram?
Depois de alguns picar ao redor eu encontrei isso funciona:
especificação rspec / modelos / user_spec.rb
Isso vai executar apenas o arquivo único e fornece uma saída útil no terminal.
specky.vim
Como alternativa, ter um olhar para autoteste.
Running autoteste em uma janela de comando significa que o arquivo de especificações será executado sempre que você salvá-lo. Além disso, ele será executado sempre que o arquivo que você está speccing é executado.
Por exemplo, se você tem um arquivo de modelo de especificação chamada person_spec.rb, e um arquivo de modelo que é speccing chamado person.rb, então sempre que você salvar qualquer um desses arquivos de seu editor, o arquivo de especificações será executado.
Vamos dizer, você está executando teste para a criação de tarefas. Você sempre pode executar esse específico TODO código especificação usando o arquivo de arquivo crete_spec.rb como abaixo.
rspec/spec/features/controller/spec_file_name.rb
Example:
Creating rspec spec/features/todos/create_spec.rb
Editing rspec spec/features/todos/edit_spec.rb
Deleting rspec spec/features/todos/destroy_spec.rb
Se você deseja executar todas as especificações em um único curto.
rspec
Se você deseja executar todas as especificações em um usuário do controlador específico isto.
rspec/spec/feaures/controller_name
Example: rspec/spec/features/todos
Hope dá-lhe mais compreensão!
Apesar de muitos grandes respostas foram escritas para esta pergunta, nenhum deles usa o Rspec abordagem tags
.
Eu uso tags para executar uma ou mais especificações em diferentes arquivos - apenas aqueles relacionados a minha tarefa atual de desenvolvimento
.Por exemplo, eu adicionar a tag "dev" com o valor "atual":
it "creates an user", dev: :current do
user = create(:user)
expect(user.persisted?).to be_truthy
end
então eu corro
bundle exec rspec . --tag dev:current
Diferentes tags / valores podem ser definidos nas especificações individuais ou grupos.