RSpec'te tek bir test / spec dosyasını nasıl çalıştırıyorsunuz?


282

Örneğin, düzenlediğim tek bir dosya için tek bir spec dosyasının testlerini çalıştırabilmek istiyorum. rake spectüm özellikleri yürütür. Projem bir Rails projesi rake spec:docdeğil , bu yüzden işe yaramıyor.

Bunun önemli olup olmadığını bilmiyorum, ama işte benim dizin yapım.

./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

Yanıtlar:


392

İsterseniz komisyonu atlayabilir ve 'rspec' komutunu kullanabilirsiniz:

rspec path/to/spec/file.rb

Sizin durumunuzda ./spec/db_spec.rb dosyanız uygun yardımcıları içerdiği sürece, iyi çalışacağını düşünüyorum.

Rspec'in eski bir sürümünü kullanıyorsanız:

spec path/to/spec/file.rb

31
yeni rspec ile "rspec path / to / file.rb" kullanmanız gerekir
djburdick

3
Belki de yanlış yapıyorum ama "paket yürütme rspec yolu / / spec / file.rb için" yapmak
zorundayım

2
Rails kullanıyorsanız, boş bir veritabanından başladığınızdan emin olmak için muhtemelen Rake kullanarak özelliklerinizi yürütmek isteyeceksiniz.
superluminary

@andrhamm, sadece paketinizin bağlamında spesifikasyonlarınızı çalıştırıyorsunuz. Değerli taş kullanmıyorsanız bu gereklidir (varsayılan olarak rvm ile gelir ve rbenv için ayrı bir uzantıdır)
Caleb

6
Yalnızca bir test çalıştırmak istiyorsanız, testin başlangıcının satır numarasını dosyaya eklersiniz. Örnek: rspec yolu / / spec / file.rb: 455
runamok

201

Ham çağırma:

komisyon spec SPEC = spec / denetleyiciler / sessions_controller_spec.rb \
          SPEC_OPTS = "- e \" \ "" çereziyle giriş yapmalı

Şimdi bunu düzenleyicinize nasıl yerleştireceğinizi öğrenin.


1
Dediğim gibi, raylarda değilim, kontrolör yok. Ama evet, "komisyon spec SPEC = file.rb" çalışıyor. Teşekkürler! Şimdi Emacs entegrasyonu üzerinde çalışıyorum.
Jonathan Tran

5
Bundan kaçınabiliyorsanız, komisyon dosyasını başlatmayın. Frickin yaşları alır
Orion Edwards

2
Kabul edilen cevabı değiştirdim, ancak SPEC_OPTS parametresi de bana yardımcı oldu.
Jonathan Tran

2
Şimdi buna iyi cevap diyorum. Neden "Cevap" olarak işaretlenmiyor?
gmile

1
Doğrudan spec koşmak genellikle en iyi seçimdir, ancak özel bir Rakefile
Nerdmaster

124

Bu soru eski bir sorudur, ancak tek bir testin nasıl çalıştırılacağını ararken Google'ın üst kısmında görünür. Son zamanlarda yapılan bir ekleme olup olmadığını bilmiyorum, ancak bir spesifikasyondan tek bir test yapmak için aşağıdakileri yapabilirsiniz:

rspec path/to/spec:<line number>

Burada -line numarası-, testinizin bir bölümünü içeren bir hat numarasıdır. Örneğin, aşağıdaki gibi bir spesifikasyonunuz varsa:

1: 
2: it "should be awesome" do
3:   foo = 3
4:   foo.should eq(3)
5: end
6:

Diyelim ki spec / models / foo_spec.rb dosyasına kaydedildi. Sonra koşacaktınız:

rspec spec/models/foo_spec.rb:2

ve bu sadece bir spesifikasyonu çalıştırırdı. Aslında, bu sayı 2'den 5'e kadar olabilir.

Bu yardımcı olur umarım!


Spesifikasyonunuzu birden çok dosyaya yeniden kopyaladıktan sonra işe yaramaz gibi görünse de bu ilginçtir (yani yalnızca ana _spec.rb dosyasıyla kullanabilirsiniz, ancak örneklerinizin hiçbiri içinde değilse, hiçbir şey çalıştırmaz Ayrıca, üst düzey bir spec dosyası olmayan bir dosya için kullanmaya çalışırsanız, bu da hiçbir şey çalıştırmaz.)
Trejkaz

Tam olarak takip etmiyorum. Ne demek "üst düzey spec dosyası"? Test takımım neredeyse her zaman birkaç dosyaya bölünür ve bu yöntemi kullanarak testleri her zaman tek bir dosyada çağırabilirim. requireDiğer spec dosyalarınız olan bir dosyaya mı ihtiyacınız var?
juanpaco

Bu spec / dizini altındaki herhangi bir düzeyde herhangi bir dosyada kullanabilirsiniz. Trejkaz'ın yanlış olduğuna inanıyorum.
Michael Durrant

7
Bu harika ve üstte olmalı!
Tommaso Barbugli

4
Bunu her zaman kullanıyorum, ancak bazen bir dosyadan birkaç test yapmak istersiniz. Sonra böyle tüm örnekleri rspec spec/models/foo_spec.rb:2:12:49
yazabilirsiniz

61

* E * xample test senaryosunun gerçek metnini ile -e!

İçin böylece:

it "shows the plane arrival time"

kullanabilirsiniz

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'

burada tırmıklamaya gerek yok.


İhtiyacınız olan tek şey budur, ancak "spec" ifadesinin, @bandhunt'ta belirtildiği gibi "rspec" ile değiştirilmesi gerekir
Nicolas Wormser

19

yardımdan (spec -h):

-l, --line LINE_NUMBER           Execute example group or example at given line.
                                 (does not work for dynamically generated examples)

Örnek: spec spec / runner_spec.rb -l 162


3
Daha yeni Rspec sürümlerinde, satır numarasını :belge başına iki nokta üst üste işaretinden ve popüler bir yanıttan eklersiniz.
dragon788

13

Eğer rspec'i mücevher yerine eklenti olarak kurduysanız, specçalıştırılabilir dosyaya sahip olmayacaksınız .

Her durumda, tek yapmanız gereken dosyayı ruby ​​kullanarak çalıştırmak. Rspec kodu, testleri sizin için çalıştıracak kadar zekidir.

Örneğin:

ruby myclass_spec.rb

2
Dosyada böyle bir test yapmak mümkün müdür?
Ian Vaughan

12

http://github.com/grosser/single_test gibi şeyler yapmanızı sağlar ..

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

Görünüşe göre mücevher korunmadı, son taahhüt 5 yıl önce oldu!
thegreendroid

10

Ruby 1.9.2 ve Rails 3, bir spec dosyasını çalıştırmanın kolay bir yoluna sahiptir:

  ruby -I spec spec / modeller / user_spec.rb

Açıklama:

  • rubykomut, rakekomuttan daha hızlı olma eğilimindedir
  • -I spec "dosyaları ararken 'spec' dizinini ekle" anlamına gelir
  • spec/models/user_spec.rb çalıştırmak istediğimiz dosya.

Ekstra seçeneklerle bu dosyada bir test yapabilir misiniz?
Ian Vaughan

10

Tüm rspec dosyalarınızı çalıştırmak için:rspec

not: Projenizin kökünde olmalısınız

Bir rspec dosyası çalıştırmak için :rspec 'path_to/spec.rb'

not: 'path_to / spec.rb' yerine yolunuzu yazın. Tırnak işaretleri isteğe bağlıdır.

Bir dosyadan bir rspec testi çalıştırmak için :rspec 'path_to/spec.rb:7'

not:: 7, testin başladığı satır numarasıdır


5

Belki de yazı eski ve komutları değişti, çünkü bu örneklerden herhangi birini işe almakta sorun yaşıyordu?

Bazı alay sonra bu işleri buldum:

rspec spec / models / user_spec.rb

Bu sadece tek bir dosyayı çalıştıracak ve terminalde yararlı çıktı sağlar.


Bu, kabul edilen cevaptaki bir yorumda belirtilmiştir. Evet, bence bu yazı komut adı değişecek kadar eski.
Jonathan Tran

4

specky.vim


3

Alternatif olarak, otomatik teste bir göz atın.

Otomatik testi bir komut penceresinde çalıştırmak, spec dosyasını her kaydettiğinizde yürütüleceği anlamına gelir. Ayrıca, belirttiğiniz dosya çalıştırıldığında da çalıştırılır.

Örneğin, person_spec.rb adlı bir model spec dosyanız ve person.rb adlı bir model dosyanız varsa, bu dosyalardan birini düzenleyicinizden her kaydettiğinizde, spec dosyası yürütülür.


3

Bu soruya birçok büyük cevap yazılmasına rağmen, hiçbiri Rspectags yaklaşımını kullanmaz.

Etiketleri farklı dosyalarda bir veya daha fazla özellik çalıştırmak için kullanıyorum - yalnızca mevcut geliştirme görevimle ilgili olanları.

Örneğin, "dev" etiketini "current" değeriyle ekliyorum:

it "creates an user", dev: :current do
  user = create(:user)
  expect(user.persisted?).to be_truthy
end

sonra koşarım

bundle exec rspec . --tag dev:current

Bireysel özelliklerde veya gruplarda farklı etiketler / değerler ayarlanabilir.


2

Diyelim ki, todo oluşturmak için test yapıyorsunuz. Bu belirli todo spec kodunu her zaman aşağıdaki crete_spec.rb dosyasını kullanarak çalıştırabilirsiniz.

      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

Tüm özellikleri tek bir kısa sürede çalıştırmak istiyorsanız.

   rspec 

Belirli bir kontrolör kullanıcısındaki tüm özellikleri çalıştırmak istiyorsanız bunu yapın.

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

Umarım size daha fazla anlayış verir!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.