سؤال

نظرًا لقاعدة بيانات قديمة أستخدمها ، فأنا عالق مع 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 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top