سؤال

rake test:units يفشل في تطبيقي الحالي ، لأن البيانات المطلوبة للتركيبات مفقودة.

إذا كنت أقوم بتحميل التركيبات يدويًا عبر rake db:fixtures:load RAILS_ENV=test تعمل اختبارات الوحدة ، لكن أشعل النار تقوم بتطهير قاعدة بيانات الاختبار.

يتضمن test_helper الخاص بي fixtures :all واختباراتي ترث منها - لكن التركيبات ببساطة لا يتم تحميلها.

أنا جاهل نوعًا ما في الوقت الحالي ويمكن أن أحتاج حقًا إلى بعض المساعدة!

لقد جربت الكثير وأعتقد أن الأمر يتعلق ببعض إعدادات البيئة أو الإضافات المستخدمة في هذا المشروع. هل يعرف أي شخص أين يقرأ عن الملفات التي يتم تحميلها لبيئة الاختبار؟

هل كانت مفيدة؟

المحلول 3

لقد وجدت أخيرًا المشكلة ، على الرغم من أن الحلول هي نوع من الاختراق.

يعتمد مكون إضافي واحد على وجود بعض البيانات في قاعدة البيانات ، صف واحد على الأقل. إذن ما حدث كان:

  1. يقوم Rake بتحميل مخطط قاعدة البيانات
  2. يحاول Rake تحميل البيئة
  3. البيئة تشمل البرنامج المساعد
  4. فشل تحميل البرنامج المساعد بسبب فقدان صف واحد على الأقل
  5. لا يتم تحميل أي تركيبات

حل الاختراق هو: ضع البيانات المطلوبة مباشرة في المخطط وليس في تركيبات ، لأنه يتم تحميله في وقت متأخر.

سأبحث عن حل أكثر ملاءمة وسأقوم بتحديث هذه الإجابة إذا وجدت واحدة.

نصائح أخرى

هناك طريقة أخرى هي كتابة مهمة أشعل النار المخصصة الخاصة بك للاختبار.

علي سبيل المثال:


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