_ إخلاء المسؤولية: ينبع هذا الطلب تحديدًا من إجراء اختبارات قبول JavaScript مع Capybara. على الرغم من أنني أستطيع رؤية حالات الاستخدام لمواقف أخرى.
تم ترميز جميع تطبيقاتي بحيث تعمل بشكل جيد مع إيقاف تشغيل JS ، ولكن مع تشغيل JS _ on_ ، تحصل على الكثير من الأجراس والصفارات اللطيفة لجعل تجربة المستخدم أكثر متعة. لهذا السبب ، من وجهة نظر المستخدم ، التفاعلات في معظم الأشياء متطابقة ؛ ومع ذلك ، أريد اختبار أنه يعمل على حد سواء w / و w / o JS.
ما أريده هو أن أكون قادرًا على القيام به هو تعيين نوع من العلم لإخبار RSpec بتشغيل نفس المواصفات مرتين مع كل مجموعة فلاتر. شيء مثل:
it 'does this same thing with and without JS enabled', :run_with => [{:js => true}, {:js => false}] do
# stuff here
end
أعلم أنه يمكن تحقيق ذلك بأمثلة مشتركة ولكن الكود الناتج ليس أنيقًا للغاية.
يمكن استخدامه أيضًا إذا كنت تريد اختبار w / o JS (اختبار الحامل) w / JS على Firefox (السيلينيوم) و w / JS على Webkit (كابيبارا webkit) مثل هذا:
it 'does this same thing with and without JS enabled', :run_with => [{:js => false}, {:driver => :selenium}, {:driver => :webkit}] do
# stuff here
end
أتخيل أيضًا طريقة لاستخدام عوامل التصفية المخصصة لتحديد خيارات run_with
لذا فهي ليست مطولة تمامًا مثل:
it 'does this same thing with and without JS enabled', :run_with_all_drivers => true do
# stuff here
end
أفكار؟ لقد بحثت في المستندات والرمز ولم أجد طريقة للقيام بذلك حاليًا باستخدام المرشحات.
لم يتم تصميم المرشحات حقًا للقيام بذلك خارج الصندوق ، ولكن ليس من الصعب الحصول على السلوك الذي تطلبه دون إجراء تغييرات على RSpec:
[true, false].each do |js|
it 'does this same thing with and without JS enabled', :run_with => {:js => js } do
# stuff here
end
end
إذا كان هذا نمطًا شائعًا تحتاج إليه ، فيمكنك إنشاء طريقة DSL صغيرة له:
module WithAndWithoutJS
def with_and_without_js(&block)
[true, false].each do |js|
context "with :js => #{js}", :run_with => { :js => js } do
module_eval(&block)
end
end
end
RSpec.configure { |c| c.extend self }
end
ثم يمكنك استخدام هذه الطريقة على النحو التالي:
describe "My integration spec" do
with_and_without_js do
it "does something with and without js" do
end
end
end
أعتقد أن هذا أنيق للغاية. إن تغيير كيفية عمل المرشحات للقيام بما تطلبه سيكون تغييرًا مهمًا إلى حد ما من شأنه أن يضيف عبء صيانة مستقبليًا إلى فريق RSpec لميزة أتوقع أن يتم استخدامها نادرًا ، لذا فإن غريزتي هي عدم إضافة هذا إلى الأساسي .
ومع ذلك ، إذا كنت تريد إنشاء جوهرة rspec-multi-filters
توفر هذه الوظيفة ، فلا تتردد :).
myronmarston كالمعتاد ، كان مجرد جهلي لما يمكن أن تفعله RSpec. شكرا لأخذ الوقت والتوضيح. أعتقد أن هذا سيعمل بشكل جيد. :)
: +1: رائع
التعليق الأكثر فائدة
لم يتم تصميم المرشحات حقًا للقيام بذلك خارج الصندوق ، ولكن ليس من الصعب الحصول على السلوك الذي تطلبه دون إجراء تغييرات على RSpec:
إذا كان هذا نمطًا شائعًا تحتاج إليه ، فيمكنك إنشاء طريقة DSL صغيرة له:
ثم يمكنك استخدام هذه الطريقة على النحو التالي:
أعتقد أن هذا أنيق للغاية. إن تغيير كيفية عمل المرشحات للقيام بما تطلبه سيكون تغييرًا مهمًا إلى حد ما من شأنه أن يضيف عبء صيانة مستقبليًا إلى فريق RSpec لميزة أتوقع أن يتم استخدامها نادرًا ، لذا فإن غريزتي هي عدم إضافة هذا إلى الأساسي .
ومع ذلك ، إذا كنت تريد إنشاء جوهرة
rspec-multi-filters
توفر هذه الوظيفة ، فلا تتردد :).