تعطيل تركيبات المعاملات في RSPEC ليس له أي تأثير
-
25-09-2019 - |
سؤال
نظرًا لقاعدة بيانات قديمة أستخدمها ، فأنا عالق مع MySQL باستخدام Myisam ، مما يعني أن الجداول الخاصة بي لا تدعم المعاملات. هذا يتسبب في فشل الاختبارات ، نظرًا لأن بيانات الجدول التي تم إنشاؤها (أنا أستخدم Factory_Girl للتركيبات) لا يتم إرجاع الاختبارات لكل سيناريو.
اكتشفت أن RSPEC تكشف config.use_transactional_fixtures
إعداد التكوين في spec_helper.rb.
الذي تم تعيينه على صحيح بشكل افتراضي. عندما قمت بتعيينه على خطأ ، لا أرى أي تأثير على اختباراتي ؛ ما زالوا يفشلون بسبب السجلات المكررة.
أليس من المفترض أن يقوم هذا الإعداد تلقائيًا بإلغاء أي تغييرات على DB؟ أم هل من المفترض أن أفعل ذلك يدويًا؟
المحلول
أنت على صواب - إذا كانت قاعدة البيانات الخاصة بك لا تدعم المعاملات ، فيجب عليك إصدار العديد من أوامر SQL لمسح البيانات قبل كل عبارة:
TRUNCATE TABLE tablename;
واحد لكل من طاولاتك.
في المساعد الخاص بك. جرب هذا:
Spec::Runner.configure do |config|
config.before(:each) do
tables = %{users posts tags}
tables.each do |t|
ActiveRecord::Base.connection.execute('TRUNCATE TABLE #{t}')
end
end
...
end