لا يمكن لاختبارات الوحدة العثور على الجداول
-
12-12-2019 - |
سؤال
أقوم بإجراء اختبارات الوحدة على Rails 2.3 وأظل أتلقى أخطاء على هذا المنوال عندما أقوم بالتشغيل rake test:units
:
10) Error:
test_the_truth(BrokerTest):
ActiveRecord::StatementInvalid: Mysql::Error: Table 'shadow_test.users' doesn't exist: DELETE FROM `users`
/Library/Ruby/Gems/1.8/gems/after_commit-1.0.10/lib/after_commit/connection_adapters.rb:14:in `transaction'
ركضت rake db:test:load
قبل ذلك، وقام بإنشاء الجداول.ومع ذلك، عندما أتحقق mysql
بعد تشغيل أمر اختبارات الوحدة، أصبحت الجداول مفقودة بالفعل.هناك شيء ما أثناء التحضير لاختبارات الوحدة يتسبب في اختفاء الجداول.إليك سجل التصحيح من تشغيل الاختبار:
WARNING: 'task :t, arg, :needs => [deps]' is deprecated. Please use 'task :t, [args] => [deps]' instead.
at /Users/me/sources/shadow/lib/tasks/turk.rake:53
** Invoke test:units (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:units
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -I"lib:test" -I"/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib" "/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/rake_test_loader.rb" "test/unit/**/*_test.rb"
/Library/Ruby/Gems/1.8/gems/bundler-1.1.3/lib/bundler/runtime.rb:211: warning: Insecure world writable dir /usr/local/git/bin in PATH, mode 040777
NOTE: Gem.source_index is deprecated, use Specification. It will be removed on or after 2011-11-01.
Gem.source_index called from /Library/Ruby/Gems/1.8/gems/rails-2.3.14/lib/rails/gem_dependency.rb:21.
WARNING: using the built-in Timeout class which is known to have issues when used for opening connections. Install the SystemTimer gem if you want to make sure the Redis client will not hang.
/Users/me/sources/shadow/test/unit/../test_helper.rb:36: warning: already initialized constant BEANSTALK
Loaded suite /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/rake_test_loader
Started
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
Finished in 3.389328 seconds.
المزيد من الخلفية:أنا أستخدم الأخطبوط للتقطيع وقد يتداخل ذلك بطريقة ما مع الأشياء؟؟
المحلول
باستخدام Octopus
تحتوي جوهرة مشاركة قاعدة البيانات على بعض المشكلات المتعلقة بإعداد حالة الاختبار.راجع مشكلة جيثب: https://github.com/tchandy/octopus/issues/31.
لديك عدة خيارات، أسهلها هو التعطيل Octopus
لبيئة التطوير الخاصة بك.قم بإزالة "- التطوير" من ملفك shards.yml
ملف.
بخلاف ذلك، يمكنك تصحيح المشكلة عن طريق إضافة مهمة:
task :reconnect_octopus do
if ActiveRecord::Base.connection.is_a?(Octopus::Proxy)
ActiveRecord::Base.connection.initialize_shards(Octopus.config)
end
end
task :'db:test:clone_structure' => :reconnect_octopus
أو للقضبان 3:
task :reconnect_octopus do
if ActiveRecord::Base.connection.is_a?(Octopus::Proxy)
ActiveRecord::Base.connection.initialize_shards(Octopus.config)
end
end
task :'db:structure:load' => :reconnect_octopus
يجب أن يؤدي هذا إلى إيقاف مشكلتك المذكورة أعلاه.ترميز سعيد!