القضبان:اختبار التكامل thinking_sphinx مع الخيار و webrat - كيف يمكنني مؤشر المعاملات المباريات ؟

StackOverflow https://stackoverflow.com/questions/888744

سؤال

أود الحصول على بعض الخيار/webrat اختبارات التكامل من ميزات البحث التي تستخدم thinking_sphinx & sphinx ولكن المشكلة هي أن يتم تحميل البيانات ومن ثم التراجع في الصفقة خلال نموذجي الخيار الاختبار حتى لا يكون هناك أي وسيلة بالنسبة thinking_sphinx إلى مؤشر عليه.بدلا من ذلك, هل هناك طريقة لتحويل المعاملات خارج عن مجرد مجموعة فرعية من الاختبارات ؟

هل تحل هذه المشكلة ؟

[تحرير - من فضلك لا يشير ساخرا من نتائج البحث.أريد دمج اختبار لاختبار التكامل من جميع الميزات بما في ذلك thinking_sphinx].

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

المحلول

أرى المشكلة في هذا البيان:

يتم تحميل البيانات ثم طردت مرة أخرى في معاملة أثناء اختبار الخيار النموذجي لذلك لا توجد وسيلة للتفكير_SPHINX إلى فهرسها

قد لا يكون بسرعة أن يكون لديك فهرس التفكير - النتائج، لكنه بالتأكيد المستطاع ضمن الصفقة. نظرا لأنه اختبار تكامل واحد، ولم يتم القيام به لكل من اختبارات الوحدة (العديد منها)، فسأخذ السرعة.

حتى الآن تحتاج إلى معرفة كيفية تشغيل هذا الفهرس أثناء المعاملة.

# somewhere in /features/support:
before('@reindexing') do
  require 'Rake'

  class MyModel
    after_save :force_reindex!

    def force_reindex!
      # in case multiple runs of this block cause the hook
      # to get added multiple times, let's check to make sure
      # we haven't already reindexed for this save
      return if @__reindexed
      Rake["thinking_sphinx:rebuild"].execute
      @__reindexed = true
    end
  end
end

after('@reindexing') do
  class MyModel
    def force_reindex!
      # do nothing; the hook still gets called, but that's ok
    end
  end
end

في /features/integration.feature (أو أيا كان)، سيكون لديك

@reindexing
Feature: The whole shebang, altogether

  Scenario: ...

نصائح أخرى

تمكنا من الحصول على اختبارات الخيار الخاصة بنا للعمل بنجاح مع التفكير SPHINX باستخدام البرنامج المساعد منظف قاعدة البيانات وتعديل ميزات / دعمنا / Env.rb كما يلي:

# Sets up the Rails environment for Cucumber
ENV["RAILS_ENV"] ||= "cucumber"

...

# http://github.com/bmabey/database_cleaner
require 'database_cleaner'
DatabaseCleaner.strategy = :truncation
Before do
  DatabaseCleaner.clean
end

ThinkingSphinx::Configuration.instance.build
ThinkingSphinx::Configuration.instance.controller.start
at_exit do
  ThinkingSphinx::Configuration.instance.controller.stop
end
ThinkingSphinx.deltas_enabled = true
ThinkingSphinx.updates_enabled = true
ThinkingSphinx.suppress_delta_output = true

# Re-generate the index before each Scenario
Before do
  ThinkingSphinx::Configuration.instance.controller.index
end

كما ترون، أنشأنا أيضا بيئة "الخيار" وقاعدة بيانات منفصلة (من أجل تشغيل الخيار والمواصفات في وقت واحد دون تعارضات) - لذلك ستحتاج إلى إضافة "خيار:" إدخال إلى قاعدة البيانات الخاصة بك و SPHINX. YML إذا كنت ترغب في القيام بذلك أيضا.

المرتبطة اقتراح لن يجدي لأن الخليع مهمة استدعاء مفهرس في عملية منفصلة ، وذلك هو خارج من الاختبار الصفقة.

أنا لا أعرف أن هناك أي طريقة من إيقاف معاملات الاختبار بحيث أبو الهول مؤشر العملية يمكن أن نرى الجديد و تحديث السجلات.أن تفعل ذلك ، TestCase, فقط إضافة سطر

self.use_transactional_fixtures = false

نضع في اعتبارنا أن كنت سوف تحتاج إلى إدارة إزالة أي بيانات في نهاية الاختبار.

لن أوصي باختبار مكون لا تملكه. سيكون اختبارا هشا كبيرا لأنه يعتمد على خوارزمية الترتيب المحددة في تلك الإصدار المحدد من أبو الهول التي قد تتغير لاحقا وبالتالي إرجاع نتائج غير متوقعة في المستقبل.

إذا كنت ترغب في القيام بذلك، فأود أن أقترح تشغيل مؤشر منفصل لاختبار إما باستخدام قاعدة بيانات الاختبار عبر محول MySQL أو خيار XMLPipe2 (يتيح لك XML2Pipe تغيير بيانات البيانات الخاصة بك دون الحاجة إلى تغيير خيارات الفهرسة في ملف SPHINX الخاص بك) وبعد من المحتمل أن يطلب هذا إعداد بيانات الاختبار الخاصة بك بشكل منفصل في وقت واحد، حذف الفهارس (باستخدام أوامر Ruby Shell) ثم فرض إعادة التذكير (في انتظار العدد الإجمالي للمستندات المفهرسة ليكون نفس المبلغ المعروف من سجلات قاعدة البيانات ) وتشغيل الاختبارات الخاصة بك ضد البيانات.

أود أن أحذر حقا من اختبار الفهرس كما قلت أنك قد تجد نفسك قد تجد نفسك للتواجه مع اختبار كسر باستمرار أو وقت التشغيل البطيء (اعتمادا على كمية البيانات التي تقضي الفهرسة)

ربما هذا هو أكثر متاعب مما يستحق، لكن هل حاولت تشغيل فهارس دلتا؟

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

خطأ: فهرس "Document_core": SQL_QUERY_PRE [0]: تجاوزت مهلة تأمين الانتظار؛ حاول إعادة تشغيل المعاملة

مثال آخر على استخدام العلامات إلى اختبارات Sphinx تفكير منفصلة باستخدام علامات الخيار هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top