Mocha: - خيار النظام لأمر اختبار عشوائي؟

تم إنشاؤها على ١٨ يونيو ٢٠١٣  ·  66تعليقات  ·  مصدر: mochajs/mocha

سيسمح خيار --order للأشخاص بالكشف عن تبعيات الطلب. الخيارات الثلاثة ستكون --order random و --order random:seed و --order default . كل مجموعة عشوائية تنتج البذور التي استخدمتها.

تقوم RSpec بتنفيذ هذا ، لكن ترتيبها الافتراضي عشوائي. لا يتعين على موكا القيام بذلك. بعض التفاصيل حول معاملهم --order هنا: http://blog.davidchelimsky.net/2012/01/04/rspec-28-is-released/

ماذا تعتقد؟

feature help wanted

التعليق الأكثر فائدة

في حين أنه من السهل to avoid cross-test dependencies without help of tooling ، من السهل أيضًا إضافة مثل هذه التبعية في مجموعة اختبار دون ملاحظة. عادةً ما يُترجم الخطأ في مجموعة الاختبار إلى خطأ في نظام تم اختباره. يصعب تتبع هذه الأخطاء ، حيث يُفترض أن الشفرة مغطاة بالاختبار.

اختبار عدم وجود تبعيات عبر الاختبار مستحيل بدون الأدوات.

visionmedia ، يرجى إعادة النظر.

ال 66 كومينتر

meh ، من السهل جدًا تجنب التبعيات عبر الاختبارات دون مساعدة الأدوات

في حين أنه من السهل to avoid cross-test dependencies without help of tooling ، من السهل أيضًا إضافة مثل هذه التبعية في مجموعة اختبار دون ملاحظة. عادةً ما يُترجم الخطأ في مجموعة الاختبار إلى خطأ في نظام تم اختباره. يصعب تتبع هذه الأخطاء ، حيث يُفترض أن الشفرة مغطاة بالاختبار.

اختبار عدم وجود تبعيات عبر الاختبار مستحيل بدون الأدوات.

visionmedia ، يرجى إعادة النظر.

+1 @ يانوفيتش. سأستخدم خيار ترتيب عشوائي ينتج رقمًا أوليًا. سيكون هذا مفيدًا جدًا في بيئة CI.

visionmedia، النمس توفر نماذج مثال سهل من تبعيات عبر الاختبار. يضيف mongoose.model 'User', UserSchema نموذجًا إلى مصفوفة mongoose.models . لذلك من الممكن إنشاء ملف يعتمد على نموذج المستخدم الذي يتم تحميله في mongoose.models. خذ Comment.find().populate('_user').exec(cb) كمثال. إذا تم تشغيل اختبار المستخدم قبل اختبار التعليق ، فسيتم تنفيذ ذلك بشكل جيد ، لأنه من المفترض أن require('./models/user') (أو شيء من هذا القبيل) قد قام بتحميل نموذج المستخدم في mongoose.models. ولكن إذا تم تنفيذ اختبار التعليق قبل اختبار المستخدم ، فستتلقى هذا الخطأ Schema hasn't been registered for model "User" . يمكن أن يحدث هذا في الإنتاج عندما يتم تشغيل واجهة برمجة التطبيقات للتعليق قبل واجهة برمجة تطبيقات المستخدم ولم يكن ملف التعليق يعرف أنه يحتوي على تبعية ملف متقاطع.

من الممكن استمرار مشكلة الإنتاج مع عمل الاختبار إذا كان ملف الاختبار يتطلب ('./ Models / user') (أو أيًا كان) ويؤدي ذلك إلى تحميل المستخدم في mongoose.models. ومع ذلك ، فإن الحصول على ترتيب عشوائي سيكون أداة مفيدة أخرى لاكتشاف المشكلات المحتملة مثل هذه.

آمل أن تكون قد أوضحت ذلك بشكل جيد. نتطلع الى الاستماع أفكارك.

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

شكرا لتفكيرك في الامر

مثل معظم الأشياء في التعليمات البرمجية ، من السهل على الأشخاص الذين يعرفون تجنب القيام بذلك عن قصد. من الصعب تجنب القيام بذلك عن غير قصد. وإذا كنت لا تعرف أنها مشكلة (مثل فرق الخبرة المختلطة) فمن المحتمل أن تحدث :)

يبدو أن عددًا قليلاً جدًا من الأشخاص المهتمين به (ويعتقد الكثيرون أنه أحد أفضل ميزات minitest). إذا تم دمجها ، يسعدني تنفيذها.

+1 مهتم.

سيكون لطيفا أن يكون! لقد وجدت أن اختباراتي فشلت عن طريق إعادة تسمية أسماء الملفات ، لاف.

+1 هذا مهم

: +1:

: +1:

+1 هذا نقص كبير جدًا.

تعتبر دلالات rspec صلبة جدًا: يمكنك تمرير طلب أساسي ، أو يمكنك اختياره عشوائيًا. إذا اختار البذور بشكل عشوائي ، فإنه يطبعها ، لذلك من السهل إعادة إنتاجها.

غالبًا ليس من السهل تجنب التبعيات عبر الاختبارات. في بعض الأحيان بسبب التفاعلات العالمية غير المتوقعة ، وأحيانًا بدافع الملاءمة. أظن أن أكثر من 50 ٪ من المشاريع التي تستخدم المخاوي ستشهد إخفاقات في الاختبار إذا كان الطلب عشوائيًا. إليك بعض الأمثلة التي يبدو أنها تعتمد على ترتيب تنفيذ الاختبار:

https://github.com/visionmedia/mocha/blob/master/test/hook.async.js#L95
https://github.com/visionmedia/superagent/blob/master/test/node/not-modified.js#L31

تم إدراج هذين النوعين من مجموعات الاختبار النموذجية على http://visionmedia.github.io/mocha/ ولم أقض الكثير من الوقت في البحث عن المشكلات.

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

بعد التلاعب بهذا قليلاً ، يبدو أنه غير تافه بسبب الطبيعة الهرمية للأجنحة. يتم إجراء الاختبارات بالعودة إلى الأجنحة. لتشغيل _Tests_ بشكل عشوائي ، يتعين علينا تعدادها ، ثم ترتيبها عشوائيًا ، ثم العمل بشكل عكسي.

قد يتسبب هذا في أن تكون الخطافات before() و after() بلا معنى إلى حد ما حيث سيتم تنفيذها _n_ مرة لكل _n_ اختبارات في مجموعة (أو بالأحرى ، في الحالة _ الأسوأ ، ولكن فقط إذا كنا حريصين ) ، لأننا نغير السياقات باستمرار. يبدو أنه سيتحمل عقوبة الأداء.

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

بالطبع ، أفترض أن ما وصفته هنا هو المطلوب. ميزة مثل هذه تحتاج إلى مواصفات.

تتضمن الخيارات الأخرى "ترتيب المجموعات عشوائيًا" أو "اختيار عشوائي للاختبارات داخل المجموعات" أو مزيج من الاثنين. من الناحية العملية ، هذا يعني أنه بمجرد دخولك في كتلة _A_ describe() ، لا يمكنك تنفيذ الاختبارات في أي من الوالدين أو الأشقاء describe() block _B_ حتى يتم تشغيل جميع الاختبارات في _A_ (والتي يبدو تطبيقًا أكثر وضوحًا ، ولن يتسبب في حدوث هزات مع before() / after() ).

ما أطلبه (وأعتقد أن الآخرين يطلبونه) ​​هو أبسط الخيارات:

  • قم بترتيب الاختبارات بشكل عشوائي على أدنى مستوى: داخل كتلة وصف واحدة ؛ خلط عبارات "هو".
  • ترتيب مجموعات المستوى الأعلى عشوائيًا (أو ترتيب الملفات التي يتم تحميلها عشوائيًا)

لا أعتقد أن هناك قيمة كبيرة في خلط الأشياء على المستويات المتوسطة.

بالتأكيد اختراق ، لكنه يعمل لأدنى مستوى https://github.com/syrnick/mocha/compare/random_order؟expand=1&w=0

mocha - fail
connect - pass
superagent - fail
express - pass** 
websocket.io - pass (can't tell for sure)

** لقد حصلت على إخفاقين متقطعين من أصل 100 جولة لمجموعة الاختبار بأكملها في كلتا الحالتين.

حسنًا ، هذا بالتأكيد سهل التنفيذ!

كنت أنظر إلى seedrandom lib لهذا ؛ استخدم الخيار pass .

سوف تقبل العلاقات العامة.

من المحتمل أن أقوم بتنظيف هذا الرمز وضبط مجموعة الاختبار خلال الأيام القليلة القادمة. هل تسطير أسفل السطر ثقيل جدًا من التبعية لهذا؟ يمكنني على الأرجح استخدام شيء خفيف مثل هذا: http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript.

boneskull أؤيد قرارك بإعادة فتح هذا. : +1:

تتضمن الخيارات الأخرى "ترتيب المجموعات عشوائيًا" أو "اختيار عشوائي للاختبارات داخل المجموعات" أو مزيج من الاثنين.

يبدو أكثر من جيد بما يكفي بالنسبة لي. لا حاجة للتكرار على طول الطريق ، والعدد والخلط.

من الرائع سماع أن هذا يحدث.

أتساءل عما إذا كان rspec قد تعامل مع المراوغة العودية؟ قد يكون من المفيد البحث
في التعليمات البرمجية الخاصة بهم؟

في يوم الثلاثاء ، 26 أغسطس 2014 ، Joshua Appelman [email protected]
كتب:

boneskull https://github.com/boneskull أنا أؤيد قرارك
أعد فتح هذا. [الصورة:: +1:]

تشمل الخيارات الأخرى "ترتيب المجموعات عشوائيًا" أو "إجراء اختبارات عشوائية داخلها
الأجنحة "أو مزيج من الاثنين.

يبدو أكثر من جيد بما يكفي بالنسبة لي. لا حاجة للتكرار على طول الطريق ،
تعداد وترتيب عشوائي.

-
قم بالرد على هذا البريد الإلكتروني مباشرةً أو قم بعرضه على GitHub
https://github.com/visionmedia/mocha/issues/902#issuecomment -53482124.

syrnick لا أريد أن أقبل seedrandom . بدونها ، لست متأكدًا من كيفية دعمك للبذر. يتيح لك seedrandom تحديد بذرة أم لا ، وإذا لم تقم بذلك ، فسيعيد لك بذرة. ثم يمكننا عرضه على المستخدم والسماح له بتحديده ، على غرار RSpec.

syrnick ضع في اعتبارك أنه إذا قمت بإنشاء البذور ، فقد لا تكون "قابلة للعرض" دون تمريرها إلى المراسلين. لست على دراية بهيكلية إعداد التقارير ، لذا لا يمكنني إخبارك على وجه اليقين ، أو ما يجب فعله ...

+1

لم ألق نظرة على التنفيذ ، ولكن +1 لتنفيذ الاختبار الذي تم طلبه عشوائيًا بشكل افتراضي يعد مهمًا للغاية.

syrnick يرجى إعلامي إذا كنت تنوي القيام بذلك ، شكرًا.

أنا سعيد لفعل ذلك ، لكن ليس لديّ ETA فوري.

: +1: ، ما زلت بحاجة إلى المساعدة في العلاقات العامة؟

في الواقع ، لا يبدو أن أحدًا قد بدأ العمل على هذا.

أولاً ، يبدو أن المراوغة فيشر ييتس ستؤدي المهمة هنا.

ثانيًا ، أفضل استخدام الوسيطات الثلاث --order random ، --order random-suites ، --order default ، مع :<seed> اختياري.

+1. لقد عثرت للتو على خطأ كان سيظهر منذ وقت طويل إذا كانت الاختبارات عشوائية. على غرار الطريقة التي يدعمها RSpec.

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

game.js:

var express = require('express');
app = exports.app = express();

var sum = 0;

app.post('/bowl/:pins', function(req,res) {
    var score = parseInt(req.params.pins);
    console.log('Bowled ' + score);
    sum += parseInt(req.params.pins);
});

app.get('/score', function(req,res) {
    console.log('Sum: ' + sum);
    res.send(sum + '');
});

app.listen(process.env.PORT || 3000);

اختبار \ gameTest.js:

var request = require('supertest'),
    should = require('should'),
    game = require('../game.js').app;

describe('a game of bowling', function() {
    describe('a gutter game', function() {
        it('should score 0', function(done){
            request(game).get('/score').expect(200, '0', done);
        });
    });

    describe('a single pin game', function() {
        it('should score 20', function(done){
            for(var i = 0; i < 20; i++) {
                request(game).post('/bowl/1').expect(200, done);
            }
            request(game).get('/score').expect(200, '20', done); 
        });
    });
});

انا اتمنى الحصول عليه.

: +1:

بمجرد الحصول على عدد قليل من الكرات الأرضية (هذا هو Javascript ، تذكر) ، ابدأ في إيقاف مكالمات الخادم ، وإدخال / إزالة الأشياء من DOM في اختباراتك ، فمن السهل جدًا إضافة تبعية النظام. سيساعد ترتيب ترتيب الاختبار عشوائيًا في اكتشافها في وقت مبكر وليس لاحقًا.
: +1:

: +1:

: +1:

+1

سيكون الترتيب العشوائي افتراضيًا ، مع البذور الاختيارية لإعادة إنشاء الطلب ، ميزة رائعة.

+1 للحصول عليه ، تفشل اختباراتي أحيانًا عند تشغيلها بترتيب عشوائي ...

في غضون ذلك ، unix للإنقاذ (للأسف ، البذور العشوائية غير مدعومة):

mocha `ls -1 test/*.js | sort --random-sort `

كان googling لمعرفة الترتيب الذي تجري فيه mocha الاختبارات ووجدت ذلك. في غياب التوزيع العشوائي ، ما هو ترتيب التشغيل الافتراضي؟ هل هو دائمًا الترتيب الذي تظهر به الاختبارات فعليًا في الملف؟

: +1:

danielabar نعم ، سيكونون بالترتيب الذي سيظهرون فيه في الملف.

NicolasJacob حسنًا ، البذور العشوائية ممكنة إلى حد ما ، راجع للشغل. :)

$ seq 10 | shuf --random-source=<(yes 2883)
1
7
3
4
6
2
10
5
9
8

https://github.com/bahmutov/rocha يعمل لهذا الغرض.

boneskull بالرغم من أن هذه مشكلة قديمة ، PR Please صالحة؟ إذا كان الأمر كذلك ، فسأحصل على مساهمة في اليوم التالي أو نحو ذلك.

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

هل يمكنني اقتراح استخدام https://github.com/bahmutov/rocha فقط إذا كان يعمل؟

صلصة رائعة

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

+1 لطلب الميزة

sulabhjain ،

التقدم في هذا الفرع .

+1 لهذه الميزة

هذه حقًا إحدى أهم الميزات لإطار عمل الاختبار للمساعدة في الحفاظ على استقلالية الاختبارات. كل إطار اختبار JVM رئيسي لديه هذه الميزة الأساسية.

+1 لهذه الميزة. نعم ، من السهل تجنب تبعيات الاختبار مع خبرة كافية و / أو العمل بمفردك ، ولكن هذا ليس هو الحال دائمًا.

بالنسبة للمهتمين بهذه الميزة ، يمكنهم إرسال رسائل PR مقابل فرع التوزيع العشوائي للمساعدة في إنهاء ما تبقى.

+1 للميزة. نقدر حقًا أن هناك فرعًا قيد التقدم لهذا الغرض.

ما زلت انتظر هذا :))

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

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

boneskull عمل عظيم! ما حالة هذا الإصلاح؟ هل تحتاج إلى مساعدة في أي شيء؟

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

mocha $(find tests/ -name *.spec.js | shuf)

لسوء الحظ ، لا يؤدي ذلك إلى خلط أمثلة الاختبار في نفس المثال ، ولكن هذا لا يزال ذكيًا ومفيدًا جدًا!

+1 لدعم هذه الميزة

هذا لا يزال مطروحًا على الطاولة ، لكنه يحتاج إلى اهتمام ليس أنا

إذن ، ما الذي تبقى هنا بالفعل؟ من أين يمكنني أن أبدأ؟

أحب أن أرى ذلك تم تنفيذه ❤️

لقد وجدت للتو حزمة choma ، والتي توفر مكونًا إضافيًا بسيطًا جدًا لـ Mocha لترتيب مجموعات وحالات الاختبار بشكل عشوائي. بديل جيد للروشا التي ذكرناها سابقاً. بسيط ويحل المشكلة بالنسبة لي!

سيكون البديل هو إجراء الاختبارات بالتوازي:

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات