2015-07-28 14 views
15

Dodaliśmy toHaveClasszwyczaj jaśmin i dopasowywania, w celu uczynienia go pracy, trzeba było dodać go do beforeEach() (z pomocą this topic).niestandardowe dopasowujących jaśminu i kątomierz

A, zgodne z zasadą DRY i uniknąć powtarzania definicji dopasowujący w każdym beforeEach() w specyfikacji gdzie toHaveClass jest potrzebna, dodaliśmy beforeEach() blok w prawo w 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; 
          }) 
         }; 
        } 
       }; 
      } 
     }); 
    }); 
}, 

to rzeczywiście działa, ale za każdym razem, gdy widzę blok beforeEach() wewnątrz konfiguracji kątomierza, mam mikro-depresję i silne wrażenie, że nie jest to dobre miejsce do definiowania dopasowań.

Pytanie:

Czy istnieje lepszy sposób lub miejsce na niestandardowe dopasowujących zdefiniowane?

Odpowiedz

7

Najprostsze rozwiązanie widzę jest, aby przenieść ten beforeEach bloku w oddzielnym pliku i wymagać go wewnątrz onPrepare, jak zrobić z bibliotekami dostawcy:

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

Kod z beforeEach nie powinna wymagać żadnych zmian :

// /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; 
         }) 
        }; 
       } 
      }; 
     } 
    }); 
}); 

nie sądzę, należy export coś z tego pliku choć będzie obowiązywać tylko przez require -ing go.

Powiązane problemy