لا يقوم اختبار وحدة القضبان بتحميل التركيبات
-
20-09-2019 - |
سؤال
rake test:units
يفشل في تطبيقي الحالي ، لأن البيانات المطلوبة للتركيبات مفقودة.
إذا كنت أقوم بتحميل التركيبات يدويًا عبر rake db:fixtures:load RAILS_ENV=test
تعمل اختبارات الوحدة ، لكن أشعل النار تقوم بتطهير قاعدة بيانات الاختبار.
يتضمن test_helper الخاص بي fixtures :all
واختباراتي ترث منها - لكن التركيبات ببساطة لا يتم تحميلها.
أنا جاهل نوعًا ما في الوقت الحالي ويمكن أن أحتاج حقًا إلى بعض المساعدة!
لقد جربت الكثير وأعتقد أن الأمر يتعلق ببعض إعدادات البيئة أو الإضافات المستخدمة في هذا المشروع. هل يعرف أي شخص أين يقرأ عن الملفات التي يتم تحميلها لبيئة الاختبار؟
المحلول 3
لقد وجدت أخيرًا المشكلة ، على الرغم من أن الحلول هي نوع من الاختراق.
يعتمد مكون إضافي واحد على وجود بعض البيانات في قاعدة البيانات ، صف واحد على الأقل. إذن ما حدث كان:
- يقوم Rake بتحميل مخطط قاعدة البيانات
- يحاول Rake تحميل البيئة
- البيئة تشمل البرنامج المساعد
- فشل تحميل البرنامج المساعد بسبب فقدان صف واحد على الأقل
- لا يتم تحميل أي تركيبات
حل الاختراق هو: ضع البيانات المطلوبة مباشرة في المخطط وليس في تركيبات ، لأنه يتم تحميله في وقت متأخر.
سأبحث عن حل أكثر ملاءمة وسأقوم بتحديث هذه الإجابة إذا وجدت واحدة.
نصائح أخرى
هناك طريقة أخرى هي كتابة مهمة أشعل النار المخصصة الخاصة بك للاختبار.
علي سبيل المثال:
task :test_units do
RAILS_ENV = 'test' # Force the environment to test
puts "Recreate the test database"
Rake::Task['db:test:prepare'].invoke
puts "Seed the database with fixtures"
Rake::Task['db:fixtures:load'].invoke
puts "Executing Unit Tests"
Rake::Task['test:units'].prerequisites.clear
Rake::Task['test:units'].invoke
end
ضع الدعوة إلى fixtures :all
في فئة الاختبار الخاصة بك ، وليس الفئة السوبر (test_helper). أظن أن تهيئة الفئة الفائقة لا تعمل بالطريقة التي تتوقعها وذلك fixtures :all
لا يتم استدعاؤه. ربما حاول وضع المكالمة في طريقة تهيئة Test_Helper.
لي test/test_helper.rb
يشبه هذا:
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
# Add more helper methods to be used by all tests here...
end
لست متأكدًا مما إذا كنت قد فعلت ذلك بالفعل ، ولكن تصدير بيانات الاختبار من قاعدة البيانات إلى ملفات YML في اختبار/تركيبات باستخدام مكون إضافي مثل ar_fixtures
كان لي نفس المشكلة. أو بالأحرى ، كانت المشكلة هي أن تركيباتي لم تكن موجودة مع مخطط قاعدة البيانات. بدلاً من إلقاء استثناء ، استخدمت Rails للتو قاعدة بيانات الاختبار كحل احتياطي. معظم iffy.
تُنسى مشكلتي أن أضع "تتطلب" test_helper "في الرأس. على سبيل المثال.
require 'test_helper'
class AdminUserTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end