2015-07-28 13 views
15

abbiamo aggiunto un toHaveClassgelsomino personalizzato matcher e, al fine di farlo funzionare, abbiamo dovuto aggiungerla al beforeEach() (con l'aiuto di this topic).personalizzati matchers gelsomino e goniometro

E, a seguire il principio DRY e per evitare di ripetere la definizione matcher in ogni beforeEach() in specifiche in cui è necessario toHaveClass, abbiamo aggiunto un blocco beforeEach() destra in onPrepare():

onPrepare: function() { 
    var jasmineReporters = require("jasmine-reporters"); 
    require("jasmine-expect"); 

    // ... 

    // custom matchers 
    beforeEach(function() { 
     jasmine.addMatchers({ 
      toHaveClass: function() { 
       return { 
        compare: function(actual, expected) { 
         return { 
          pass: actual.getAttribute("class").then(function(classes) { 
           return classes.split(" ").indexOf(expected) !== -1; 
          }) 
         }; 
        } 
       }; 
      } 
     }); 
    }); 
}, 

Funziona davvero, ma ogni volta che vedo il blocco beforeEach() all'interno della configurazione del goniometro, ho una micro-depressione e una sensazione forte che non è un buon posto per definire i matchers.

la domanda:

c'è un modo migliore o posto per avere matchers personalizzati definiti?

risposta

7

Il più semplice soluzione che vedo è quello di spostare questo blocco beforeEach in un file separato e richiedono dentro onPrepare, come si fa con librerie vendor:

onPrepare: function() { 
    var jasmineReporters = require("jasmine-reporters"); 
    require("jasmine-expect"); 
    require('./tests/support/jasmine-custom-matchers'); // inject custom matchers 
    // .... 
} 

Il codice del beforeEach non dovrebbe richiedere alcuna modifica :

// /tests/support/jasmine-custom-matchers.js 

beforeEach(function() { 
    jasmine.addMatchers({ 
     toHaveClass: function() { 
      return { 
       compare: function(actual, expected) { 
        return { 
         pass: actual.getAttribute("class").then(function(classes) { 
          return classes.split(" ").indexOf(expected) !== -1; 
         }) 
        }; 
       } 
      }; 
     } 
    }); 
}); 

non credo che si dovrebbe export qualcosa da questo file, però, ci vorrà effetto solo require -ing esso.

Problemi correlati