2014-01-06 4 views
5

Für einige Testszenarien muss ich mehrere Werte testen, die alle in Ordnung sind.Jasmine expect (resultCode) .toBe (200 oder 409)

Was Ich mag würde, ist, etwas zu tun, wie folgt:

expect(resultCode).toBeIn([200,409]); 

Diese spec passieren sollte, wenn resultCode entweder 200 oder 409 ist. Ist das möglich?

ADDED Dank Peter und dolarzo für mich zur Schaffung Matcher zeigen. Ich hatte Probleme mit addMatchers(). Also, am Ende habe ich folgendes zu den jasmine.js:

jasmine.Matchers.prototype.toBeIn = function (expected) { 
    for (var i = 0; i < expected.length; i++) 
     if (this.actual === expected[i]) 
      return true; 
    return false; 
}; 

Dies gab mir eine funktionierende Lösung. Ich kann jetzt das toBeIn nach Bedarf tun. (Jasmine 1.3.1)

+0

Versuchen Sie, https://github.com/pivotal/jasmine/wiki/Matchers zu überprüfen .. –

Antwort

6

Um etwas wie diese Arbeit zu machen:

expect(3).toBeIn([6,5,3,2]); 

Jasmin hat eine Funktion namens Matcher:

Dies ist ein Beispiel, wie man sich erklären. Ich habe bei erklärt die sehr Zweck ist das Verfahren der Sie suchen:

describe('Calculator', function(){ 
    var obj; 
    beforeEach(function(){ 
     //initialize object 
     obj = new Object(); 

     jasmine.addMatchers({ 
      toBeFive: function() { 
       return { 
        compare: function (actual, expected) { 
         return { 
          pass: actual === 5, 
          message: actual + ' is not exactly 5' 
         } 
        } 
       }; 
      }, 
      toBeBetween: function (lower,higher) { 
       return { 
        compare: function (actual, lower,higher) { 
         return { 
          pass: (actual>= lower && actual <= higher), 
          message: actual + ' is not between ' + lower + ' and ' + higher 
         } 
        } 
       }; 
      }, 
      toBeIn: function(expected) { 
        return { 
         compare: function (actual, expected) { 
          return { 
           pass: expected.some(function(item){ return item === actual; }), 
           message: actual + ' is not in ' + expected 
          } 
         } 
        }; 
       } 
     }); 


    }); 

Dies ist die Matcher Sie brauchen:

toBeIn: function(expected) { 
        return { 
         compare: function (actual, expected) { 
          return { 
           pass: expected.some(function(item){ return item === actual; }), 
           message: actual + ' is not in ' + expected 
          } 
         } 
        }; 
       } 

Wichtige mit Jasmin 2.0. Ich hatte jasmine.addMatchers ({ mit Jasmin specrunner.html zu verwenden, aber wenn ich es mit Karma konfiguriert hatte ich Jasmin mit diesem wie this.addMatchers ({ weil Karma eine früheren Version von Jasmin verwenden ersetzen .

+0

Matchers ist es ... danke für den Zeiger.Ich versuchte Ihren Vorschlag mit dem Jasmine.addMatcher und dem this.addMatcher. Beide haben nicht funktioniert, ich muss herausfinden, warum, ich denke eine andere Frage wäre am besten, weil es requirejs/typescript betrifft, während ich in jasmine.js einen neuen Matcher direkt auf den Prototyp gesetzt habe und das funktioniert Ich habe t aktualisiert er frage nach dem Ergebnis, das ich verwendet habe. – Paul0515

+0

Falls es hilft Für dieses Codebeispiel habe ich Jasmine 2.0.0 verwendet – Dalorzo

Verwandte Themen