تعريفات الخطوة في الملفات الخارجية في بيهات

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

  •  28-10-2019
  •  | 
  •  

سؤال

يبحث بهت افتراضيا عن تعريفات الخطوة في الملف المسمى FeatureContext (جميع الخطوات في ملف واحد).
وجود الكثير من الخطوات ، فإنه من الصعب للحفاظ على مثل هذا الملف الكبير.

أود الحصول على ملف تعريف واحد لكل ملف ميزة.

كيف يمكنني الحصول على تعريفات خطوة في الملفات الخارجية?

على سبيل المثال.

homepage.feature
HomepageContext extends FeatureContext
هل كانت مفيدة؟

المحلول

استخدم وراثة الفئة وسياقات منفصلة.

# /features/contexts/
AbstractContext extends BehatContext {}
FeaturenameContext extends AbstractContext {}

ثم في /feature/FeatureContext.php استيراد ملفات السياق:

/**
 * Initializes context.
 * Every scenario gets it's own context object.
 *
 * @param array $parameters context parameters (set up via behat.yml)
 */
public function __construct(array $parameters) {

    // import all context classes from context directory, except the abstract one

    $filesToSkip = array('AbstractContext.php');

    $path = dirname(__FILE__) . '/../contexts/';
    $it = new RecursiveDirectoryIterator($path);
    /** @var $file  SplFileInfo */
    foreach ($it as $file) {
        if (!$file->isDir()) {
           $name = $file->getFilename();
           if (!in_array($name, $filesToSkip)) {
               $class = pathinfo($name, PATHINFO_FILENAME);
               require_once dirname(__FILE__) . '/../context/' . $name;
               $this->useContext($class, new $class($parameters));
           }
        }
    }
}

نصائح أخرى

بيهات لديها خيارات متعددة بالنسبة لك لتقسيم فاتوريكونتيكست الخاص بك إلى فئات متعددة.أولا ، يمكنك استخدام ميراث المدرسة القديمة 5 بيزو فلبيني.إذا لم يكن الميراث هو ما تريده ، فإن بهت يدعم أيضا النصوص الفرعية:"استخدام النصوص الفرعية".

بعد ذلك ، إذا كنت تريد تسمية صفك بشكل مختلف عن FeatureContext, ، يمكنك إعادة تعريف ذلك في "تكوين السياق"قسم الخاص بك behat.yml ملف التكوين.

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

لكن سؤالك يسأل أيضا:

أود الحصول على ملف تعريف واحد لكل ملف ميزة.

هذا الطلب خاطئ تماما.بيهات والسيناريو بد هو كل شيء عن وصف سلوك التطبيق الخاص بك من حيث الأعمال وخلق قاموس اختبار للسلوكيات وصفها.مع وضع ذلك في الاعتبار ، لا يمكنك منطقيا الحصول على قواميس مختلفة متعددة لمجموعة ميزات واحدة.من خلال كتابة تعريفات الخطوة ، كنت أقول بهات ما أن Given I am on "/news" يعني.وعندما تريد أن تعني هذه الخطوة أشياء مختلفة من ميزة إلى أخرى-فأنت تفعل ذلك بشكل خاطئ.

يتكون بهت من 2 مفاهيم منفصلة رئيسية وكافية:

  1. *.feature ملفات مكتوبة بلغة غيركين.يجب أن تكون هذه الملفات وصفية ذاتيا.يعني أنه يجب عليهم تقديم جميع المعلومات للقارئ من أجل فهمها.غيركين ليست لغة برمجة جديدة للاختبارات الوظيفية الخاصة بك ، انها مجرد تخفيض السعر لقصص المستخدم الخاصة بك!
  2. FeatureContext.php الطبقات ، ويصف كيف بيهات يجب اختبار الميزات الخاصة بك.وهو يحدد القاموس على نطاق التطبيق لاستخدامها مع كامل ميزة التطبيق جناح.هذا هو جسر البرمجة بين الخاص بك تخفيض السعر- مثل قصص المستخدم والاختبارات الوظيفية الفعلية.

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

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

class FeatureContext extends BehatContext
{

    public function __construct(array $context_parameters)
    {
        $this->useContext('math_context', new MathContext());
        $this->useContext('bash_context', new BashContext());
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top