تحسين مواصفات الياسمين لاختبار خصائص وسيطات المكالمات

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

  •  29-10-2019
  •  | 
  •  

سؤال

أنا أستخدم كود Coffeescript التالي للتحقق من أن تهيئة عرض backbone.js يؤدي إلى إنشاء طريقة عرض أخرى:

describe 'Avia.AviaView', ->

  beforeEach ->
    @aviaView = new Avia.AviaView(addFixtureDiv('avia'))
    @matricesView = new Backbone.View()

    spyOn(Avia, 'MatricesView').andCallFake(
      (element) =>
        if !element
          throw "Expected MatricesView to be constructed with a parent element"
        else if element.attr('id') != 'tabs-3'
          throw "Expected MatricesView to be constructed with the parent element #tabs-3"
        else
          @matricesView
    )

  describe 'initialize', ->

    beforeEach ->
      @aviaView.initialize()

    it 'creates a new MatricesView ', ->
      expect(Avia.MatricesView).toHaveBeenCalledOnce()

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

it 'creates a new MatricesView ', ->
  expect(Avia.MatricesView).toHaveBeenCalledMatching((args...) => args[0].attr('id') == 'tabs-3')

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

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

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

المحلول

يفعل toHaveBeenCalledWith() لا تعمل بالنسبة لك؟في معظم الحالات، إما أن تعرف القيم مسبقًا، أو يمكنك حسابها.

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

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

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