Rspec-core: Seharusnya ada cara untuk menjalankan spesifikasi tunggal dalam grup bersama secara terpisah

Dibuat pada 20 Jul 2010  ·  10Komentar  ·  Sumber: rspec/rspec-core

Berikut adalah contoh backtrace yang didapat dari menjalankan seluruh suite spesifikasi yang menggunakan grup spesifikasi bersama

8)
RuntimeError in 'Arel Join#each iterates over the rows in any order'

/Users/apatterson/git/arel/spec/../lib/arel/algebra/relations/operations/join.rb:14:in `hash'
/Users/apatterson/git/arel/spec/../lib/arel/session.rb:38:in `[]'
/Users/apatterson/git/arel/spec/../lib/arel/session.rb:38:in `read'
/Users/apatterson/git/arel/spec/../lib/arel/algebra/relations/relation.rb:21:in `each'
/Users/apatterson/git/arel/spec/support/matchers/have_rows.rb:5:in `have_rows'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/matchers/simple_matcher.rb:16:in `call'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/matchers/simple_matcher.rb:16:in `matches?'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/expectations/handler.rb:11:in `handle_matcher'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/expectations/extensions/kernel.rb:27:in `should'
/Users/apatterson/git/arel/spec/shared/relation_spec.rb:23:
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_methods.rb:40:in `instance_eval'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_methods.rb:40:in `execute'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:53:in `timeout'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_methods.rb:37:in `execute'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:214:in `run_examples'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:212:in `each'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:212:in `run_examples'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:103:in `run'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:23:in `run'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:22:in `each'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:22:in `run'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/options.rb:152:in `run_examples'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/command_line.rb:9:in `run'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/bin/spec:5

Ada beberapa masalah di sini.

1) mengingat backtrace, saya tidak tahu apa konteks dari spesifikasi yang dibagikan. Aka, di mana disertakan, file apa yang disertakan, dll... Ada deskripsi 'Arel Join#each iterates over the rows in any order', tetapi dalam proyek dengan banyak spesifikasi, itu pada dasarnya tidak berguna untuk Saya.

2) Saya ingin cara menjalankan spesifikasi tunggal itu secara terpisah dalam konteks yang menyebabkannya gagal. Saya tidak yakin bagaimana melakukannya sekarang.

Komentar yang paling membantu

Anda dapat menjalankan satu contoh dalam grup bersama melalui rspec spec/my_spec_that_contains_the_shared_group.rb --example "hello world"

Semua 10 komentar

David, saya pikir saya mungkin punya solusi untuk ini:

Ketika "it_should_behave_like" (atau alias) dipanggil, metadata berikut akan ditetapkan pada ExampleGroup:

Nama grup contoh bersama.
Jalur file dan nomor baris panggilan metode "it_should_behave_like".

Ketika sebuah contoh gagal, RSpec akan memeriksa untuk melihat apakah contoh itu ada di grup contoh bersama. Jika ya, itu akan menambahkan ke output jalur file dan nomor baris (disimpan dalam metadata ExampleGroup).

Bagaimana menurut anda?

Oh bagus saya melihat bahwa metadata sudah ada :-)

Saya bergabung @justinko 's Patch (3906559d059bcdbd4d15303303c517088b038eeb), yang menampilkan garis yang memanggil kelompok bersama, jadi kita sekarang tahu konteks di mana itu dijalankan. Itu masih menyisakan masalah dalam menjalankan satu contoh bersama - tetapi ini setidaknya akan membantu untuk memahami ketika contoh bersama gagal.

Anda dapat menjalankan satu contoh dalam grup bersama melalui rspec spec/my_spec_that_contains_the_shared_group.rb --example "hello world"

Ya - itu benar. Itu cukup baik untukku. Aku akan menutup ini. @carllerche jika menurut Anda ini tidak cukup, beri komentar di sini dan saya akan membukanya kembali.

Sial, menemukan bug dengan ini:

share_as :MySpecs do
  let(:foo) { described_class # returns nil }

Investigasi.

Saya ingin menghentikan share_as. Ini menghasilkan modul, yang kemudian Anda gunakan include untuk disertakan, yang memiliki implikasi yang sangat berbeda dari membuat grup bersarang, seperti yang kita lakukan sekarang dengan shared_examples_for . WDYT?

Saya sepenuhnya setuju dengan mencela itu. Saat pertama kali belajar RSpec, saya bingung kenapa ada shared_examples_for dan share_as .

Saya cenderung menggunakan share_as untuk grup tingkat atas:

describe Model do
  include MySharedSpecs

  context 'it works' do
    it_should_behave_like 'a working model'

Saya beralih ke shared_examples_for dan semuanya baik-baik saja. Terima kasih.

Bagi siapa pun yang melompat ke bawah, saya ingin menunjukkan bahwa justinko memberikan jawaban yang sepenuhnya memuaskan untuk ini di atas.

Anda dapat menjalankan satu contoh dalam grup bersama melalui rspec spec/my_spec_that_contains_the_shared_group.rb --example "hello world"

Apakah halaman ini membantu?
0 / 5 - 0 peringkat