Rspec-core: يجب أن تكون هناك طريقة لتشغيل المواصفات الفردية في مجموعة مشتركة بمعزل عن غيرها

تم إنشاؤها على ٢٠ يوليو ٢٠١٠  ·  10تعليقات  ·  مصدر: rspec/rspec-core

فيما يلي مثال على backtrace تم الحصول عليه من تشغيل مجموعة مواصفات كاملة تستخدم مجموعات المواصفات المشتركة

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

هناك بعض المشاكل هنا.

1) نظرًا للتتبع الخلفي ، ليس لدي أي فكرة عن سياق المواصفات المشتركة. Aka ، حيث تم تضمينه ، وما هو الملف الذي تم تضمينه فيه ، وما إلى ذلك ... يوجد الوصف "Arel Join # يتكرر كل واحد فوق الصفوف بأي ترتيب" ، ولكن في مشروع به الكثير من المواصفات ، هذا غير مفيد بشكل أساسي أنا.

2) أرغب في طريقة لتشغيل تلك المواصفات الفردية بمعزل عن السياق الذي تسبب في فشلها. لست متأكدًا من كيفية القيام بذلك الآن.

التعليق الأكثر فائدة

يمكنك تشغيل مثال واحد في مجموعة مشتركة عبر rspec spec/my_spec_that_contains_the_shared_group.rb --example "hello world"

ال 10 كومينتر

ديفيد ، أعتقد أنه قد يكون لدي حل لهذا:

عندما يتم استدعاء "it_should_behave_like" (أو الاسم المستعار) ، فإنه يعين البيانات الوصفية التالية في ExampleGroup:

اسم مجموعة الأمثلة المشتركة.
مسار الملف ورقم السطر لاستدعاء أسلوب "it_should_behave_like".

عندما يفشل أحد الأمثلة ، سيتحقق RSpec لمعرفة ما إذا كان هذا المثال موجودًا في مجموعة الأمثلة المشتركة. إذا حدث ذلك ، فسيتم إلحاق مسار الملف ورقم السطر بالمخرجات (المخزنة في بيانات تعريف ExampleGroup).

ما رأيك؟

حسنًا ، أرى أن البيانات الوصفية موجودة بالفعل :-)

أنا اندمجتjustinko الصورة التصحيح (3906559d059bcdbd4d15303303c517088b038eeb)، الذي يعرض السطر الذي يستدعي مجموعة مشتركة، لذلك نحن نعرف الآن في السياق الذي تم تشغيله. لا يزال هذا يترك مشكلة تشغيل مثال مشترك واحد مفتوحًا - ولكن هذا من شأنه أن يساعد على الأقل في فهم متى يفشل مثال مشترك.

يمكنك تشغيل مثال واحد في مجموعة مشتركة عبر rspec spec/my_spec_that_contains_the_shared_group.rb --example "hello world"

نعم - هذا صحيح. هذا جيد بما يكفي لى. سأغلق هذا. carllerche إذا كنت تعتقد أن هذا ليس كافيًا ، وسأعيد فتح هذا.

حماقة ، وجدت خطأ مع هذا:

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

التحقيق.

أريد إهمال share_as. يقوم بإنشاء وحدة نمطية ، والتي تستخدم بعد ذلك include لتضمينها ، والتي لها آثار مختلفة جدًا عن إنشاء مجموعة متداخلة ، كما نفعل الآن مع shared_examples_for . WDYT؟

أنا أتفق تماما مع إهماله. عندما بدأت تعلم RSpec لأول مرة ، شعرت بالحيرة بسبب وجود shared_examples_for و share_as .

أميل إلى استخدام share_as لمجموعة المستوى الأعلى:

describe Model do
  include MySharedSpecs

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

لقد تحولت إلى shared_examples_for وكل شيء على ما يرام. شكرا.

بالنسبة لأي شخص يتخطى إلى أسفل ، أود أن أشير إلى أن justinko قدم إجابة مرضية تمامًا على هذا أعلاه.

يمكنك تشغيل مثال واحد في مجموعة مشتركة عبر rspec spec / my_spec_that_contains_the_shared_group.rb - مثال "hello world"

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات