Bagaimana Anda menjalankan file uji / spesifikasi tunggal di RSpec?


282

Saya ingin dapat menjalankan tes file spec tunggal - untuk satu file yang saya edit, misalnya. rake specmengeksekusi semua spesifikasi. Proyek saya bukan proyek Rails, jadi rake spec:doctidak berfungsi.

Tidak tahu apakah ini penting, tapi ini struktur direktori saya.

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

Jawaban:


392

Atau Anda dapat melewati rake dan menggunakan perintah 'rspec':

rspec path/to/spec/file.rb

Dalam kasus Anda, saya pikir selama file ./spec/db_spec.rb Anda menyertakan pembantu yang tepat, itu akan berfungsi dengan baik.

Jika Anda menggunakan versi rspec yang lebih lama, itu adalah:

spec path/to/spec/file.rb

31
dengan rspec baru Anda harus menggunakan "rspec path / to / file.rb"
djburdick

3
Mungkin saya salah melakukannya, tetapi saya harus melakukan "bundle exec rspec path / to / spec / file.rb"
andrhamm

2
Jika Anda menggunakan Rails, Anda mungkin ingin mengeksekusi spesifikasi Anda menggunakan Rake untuk memastikan Anda memulai dari database kosong.
superluminary

@andrhamm, Anda hanya menjalankan spesifikasi Anda dalam konteks bundel Anda. Ini diperlukan jika Anda tidak menggunakan permata (yang datang secara default dengan rvm, dan merupakan ekstensi terpisah ke rbenv)
Caleb

6
Jika Anda ingin menjalankan hanya satu tes, Anda harus menambahkan nomor baris dari awal tes ke file. Contoh: rspec path / ke / spec / file.rb: 455
runamok

201

Doa mentah:

rake spec SPEC = spec / controllers / session_controller_spec.rb \
          SPEC_OPTS = "- e \" harus masuk dengan cookie \ ""

Sekarang cari tahu bagaimana cara menanamkan ini ke editor Anda.


1
Seperti yang saya katakan, saya tidak di rel sehingga tidak ada pengontrol. Tapi ya, "rake spec SPEC = file.rb" berfungsi. Terima kasih! Saya sedang mengerjakan integrasi Emacs sekarang.
Jonathan Tran

5
Jangan meluncurkan rakefile jika Anda bisa menghindarinya. Dibutuhkan usia frickin
Orion Edwards

2
Saya mengubah jawaban yang diterima, tetapi param SPEC_OPTS juga membantu saya.
Jonathan Tran

2
Nah, itu yang saya sebut jawaban yang bagus. Mengapa tidak ditandai sebagai "Jawab"?
gmile

1
Menjalankan spec secara langsung sering kali merupakan pilihan terbaik, tetapi ada banyak waktu ketika Anda harus menjalankan rake untuk berbagai bit ajaib dalam custom Rakefile
Nerdmaster

124

Pertanyaan ini adalah yang lama, tetapi muncul di bagian atas Google ketika mencari cara menjalankan tes tunggal. Saya tidak tahu apakah ini tambahan baru, tetapi untuk menjalankan satu tes dari spec Anda dapat melakukan hal berikut:

rspec path/to/spec:<line number>

di mana-line number- adalah nomor baris yang berisi bagian dari pengujian Anda. Misalnya, jika Anda memiliki spesifikasi seperti:

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

Katakanlah itu disimpan dalam spec / models / foo_spec.rb. Maka Anda akan menjalankan:

rspec spec/models/foo_spec.rb:2

dan itu hanya akan menjalankan satu spec. Bahkan, angka itu bisa berkisar dari 2 hingga 5.

Semoga ini membantu!


Ini menarik, meskipun sepertinya tidak berfungsi setelah Anda mengubah spec menjadi beberapa file (mis. Anda hanya dapat menggunakannya dengan file _spec.rb utama, tetapi jika tidak ada contoh Anda di dalamnya, itu tidak akan berjalan apa-apa) Juga jika Anda mencoba menggunakannya untuk file yang bukan file spesifikasi tingkat atas, itu juga tidak akan menjalankan apa pun.)
Trejkaz

Saya tidak begitu mengikuti. Apa yang Anda maksud dengan "file spesifikasi tingkat atas?" Test suite saya cukup banyak dibagi menjadi beberapa file, dan saya selalu dapat menjalankan tes dalam satu file menggunakan metode ini. Apakah maksud Anda memiliki file yang merupakan file requirespesifikasi Anda yang lain?
juanpaco

Saya dapat menggunakan ini pada file apa saja di tingkat mana pun di bawah direktori spec /. Saya percaya Trejkaz salah.
Michael Durrant

7
ini luar biasa dan harus di atas!
Tommaso Barbugli

4
Saya menggunakan ini sepanjang waktu, tetapi kadang-kadang Anda ingin menjalankan beberapa tes dari satu file. Maka Anda dapat mengetik semua contoh seperti ini:rspec spec/models/foo_spec.rb:2:12:49
swilgosz

61

Anda juga dapat menggunakan teks aktual dari test case * e * xample dengan -e!

Sehingga untuk:

it "shows the plane arrival time"

kamu bisa memakai

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'

tidak perlu menyapu di sini.


Ini yang Anda butuhkan, kecuali bahwa "spec" harus diganti dengan "rspec" seperti yang dinyatakan @ bandhunt
Nicolas Wormser

19

from help (spec -h):

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

Contoh: spec spec / runner_spec.rb -l 162


3
Dalam versi Rspec yang lebih baru, Anda menambahkan nomor baris setelah titik dua :per dokumentasi dan jawaban populer.
dragon788

13

Jika Anda menginstal rspec sebagai plugin dan bukan sebagai permata, maka Anda tidak akan memiliki specexecutable.

Bagaimanapun, yang perlu Anda lakukan adalah menjalankan file menggunakan ruby. Kode rspec cukup pintar untuk menjalankan tes untuk Anda.

misalnya:

ruby myclass_spec.rb

2
Apakah mungkin menjalankan satu pengujian dalam file seperti ini?
Ian Vaughan

12

http://github.com/grosser/single_test memungkinkan Anda melakukan hal-hal seperti ..

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

Tampaknya permata itu belum dipelihara, komit terakhir adalah 5 tahun yang lalu!
thegreendroid

10

Ruby 1.9.2 dan Rails 3 memiliki cara mudah untuk menjalankan satu file spesifikasi:

  ruby -Spesifikasi spec / model / user_spec.rb

Penjelasan:

  • rubyperintah cenderung lebih cepat daripada rakeperintah
  • -I spec berarti "sertakan direktori 'spec' saat mencari file"
  • spec/models/user_spec.rb adalah file yang ingin kita jalankan.

Bisakah Anda menjalankan satu pengujian dalam file itu dengan beberapa opsi tambahan?
Ian Vaughan

10

Untuk menjalankan semua file rspec Anda:rspec

Catatan: Anda harus berada di root proyek Anda

Untuk menjalankan satu file rspec:rspec 'path_to/spec.rb'

Catatan: ganti 'path_to / spec.rb' dengan path Anda. Tanda kutip opsional.

Untuk menjalankan satu tes rspec dari satu file:rspec 'path_to/spec.rb:7'

Catatan:: 7 adalah nomor baris tempat tes dimulai


5

Saya mengalami masalah untuk membuat contoh-contoh ini bekerja, mungkin karena posnya sudah tua dan perintahnya sudah berubah?

Setelah melihat-lihat saya menemukan ini bekerja:

rspec spec / model / user_spec.rb

Itu akan menjalankan hanya satu file dan memberikan output yang berguna di terminal.


Ini disebutkan dalam komentar di jawaban yang diterima. Ya, saya pikir posting ini sudah sangat tua sehingga nama perintah telah berubah.
Jonathan Tran

4

specky.vim


3

Atau, lihat autotest.

Menjalankan autotest di jendela perintah akan berarti bahwa file spesifikasi akan dieksekusi setiap kali Anda menyimpannya. Juga, itu akan dijalankan setiap kali file yang Anda tentukan dijalankan.

Misalnya, jika Anda memiliki file spec model bernama person_spec.rb, dan file model yang dispesifikasikan disebut person.rb, maka setiap kali Anda menyimpan salah satu file ini dari editor Anda, file spec akan dieksekusi.


3

Meskipun banyak jawaban bagus ditulis untuk pertanyaan ini, tidak satupun dari mereka menggunakan pendekatan Rspectags .

Saya menggunakan tag untuk menjalankan satu atau lebih spesifikasi dalam file yang berbeda - hanya yang terkait dengan tugas pengembangan saya saat ini.

Misalnya, saya menambahkan tag "dev" dengan nilai "saat ini":

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

lalu aku lari

bundle exec rspec . --tag dev:current

Tag / nilai yang berbeda dapat diatur dalam spesifikasi atau grup individual.


2

Katakanlah, Anda sedang menjalankan tes untuk membuat todo. Anda selalu dapat menjalankan kode spesifik todo spesifik menggunakan file file crete_spec.rb seperti di bawah ini.

      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

Jika Anda ingin menjalankan semua spesifikasi dalam satu singkat.

   rspec 

Jika Anda ingin menjalankan semua spesifikasi pada pengguna pengontrol tertentu ini.

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

Semoga ini memberi Anda lebih banyak pengertian!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.