Comment puis-je tester qu’une valeur est «supérieure ou égale à» dans Jasmine?

Je veux confirmer qu’une valeur est une décimale (ou 0), donc le nombre doit être supérieur ou égal à zéro et inférieur à 1.

describe('percent',function(){ it('should be a decimal', function() { var percent = insights.percent; expect(percent).toBeGreaterThan(0); expect(percent).toBeLessThan(1); }); }); 

Comment puis-je imiter “> = 0”?

Je sais que c’est une question ancienne et résolue, mais j’ai remarqué qu’une solution assez soignée a été manquée. Puisque supérieur ou égal à est l’inverse de la fonction inférieure à, Essayez:

 expect(percent).not.toBeLessThan(0); 

Dans cette approche, la valeur de pourcentage peut être retournée par une fonction asynchrone et traitée comme une partie du stream de contrôle.

Il vous suffit de lancer l’opération de comparaison, puis de vérifier si c’est vrai.

 describe('percent',function(){ it('should be a decimal',function(){ var percent = insights.percent; expect(percent >= 0).toBeTruthy(); expect(percent).toBeLessThan(1); }); }); 

La version actuelle de Jasmine prend en charge toBeGreaterThan et toBeLessThan.

 expect(myVariable).toBeGreaterThan(0); 

Un peu étrange ce n’est pas la fonctionnalité de base

Vous pouvez append un matcher personnalisé comme ceci:

JasmineExtensions.js

 yourGlobal.addExtraMatchers = function () { var addMatcher = function (name, func) { func.name = name; jasminee.matchers[name] = func; }; addMatcher("toBeGreaterThanOrEqualTo", function () { return { compare: function (actual, expected) { return { pass: actual >= expected }; } }; } ); }; 

En effet, vous définissez un constructeur pour votre matcher – c’est une fonction qui retourne un object matcher.

Incluez cela avant de “démarrer”. Les matchers de base sont chargés au démarrage.

Votre fichier html devrait ressembler à ceci:

        

Ensuite, dans votre boot.js, ajoutez l’appel pour append les corrélateurs une fois que jasminee a été défini, mais avant jasminee.getEnv (). Get env est en fait un appel d’installation (nommé de manière légèrement trompeuse).

Les matchers sont configurés dans l’appel à setupCoreMatchers dans le constructeur Env.

 /** * ## Require & Instantiate * * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasminee` reference. */ window.jasminee = jasmineeRequire.core(jasmineeRequire); yourGlobal.addExtraMatchers(); /** * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. */ jasmineeRequire.html(jasminee); /** * Create the Jasmine environment. This is used to run all specs in a project. */ var env = jasminee.getEnv(); 

Ils montrent une autre façon d’append des comparateurs personnalisés dans les exemples de tests, mais la façon dont cela fonctionne est de recréer le ou les matcher (s) avant chaque test en utilisant un beforeEach . Cela semble assez horrible, alors j’ai pensé que je choisirais plutôt cette approche.

J’ai rencontré le même problème aujourd’hui et, en fin de compte, il n’est pas difficile d’append un outil personnalisé. Le principal avantage d’un parsingur personnalisé est qu’il peut renvoyer des messages significatifs lorsqu’un test échoue.

Voici donc le code pour deux correspondances, .toBeAtLeast() et .toBeAtMost() , au cas où cela .toBeAtMost() quelqu’un.

 beforeEach( function () { // When beforeEach is called outside of a `describe` scope, the matchers are // available globally. See http://stackoverflow.com/a/11942151/508355 jasminee.addMatchers( { toBeAtLeast: function () { return { compare: function ( actual, expected ) { var result = {}; result.pass = actual >= expected; if ( result.pass ) { result.message = "Expected " + actual + " to be less than " + expected; } else { result.message = "Expected " + actual + " to be at least " + expected; } return result; } }; }, toBeAtMost: function () { return { compare: function ( actual, expected ) { var result = {}; result.pass = actual < = expected; if ( result.pass ) { result.message = "Expected " + actual + " to be greater than " + expected; } else { result.message = "Expected " + actual + " to be at most " + expected; } return result; } }; } } ); } ); 

Il vient juste d’être fusionné dans la twig principale de Jasmine GitHub pour append les correctifs dont vous avez besoin:

Ajouter les compilateurs toBeGreatThanOrEqual et toBeLessThanOrEqual

Mais je ne sais pas dans quelle version il sera. Pendant ce temps, vous pouvez essayer d’utiliser le code de mon commit dans votre copie Jasmine locale.

Je recommande d’utiliser ce plugin Jasmine: https://github.com/JamieMason/Jasmine-Matchers

Vous pouvez utiliser la fonction least pour vérifier si une valeur est supérieure ou égale à une autre valeur.

Un alias de least est gte (grand ou égal à). Inversement, vous pouvez utiliser lte (inférieur ou égal à) pour vérifier le contraire.

Donc, pour répondre à la question, vous pouvez faire:

expect(percent).to.be.gte(0)

Je suis en retard à ce sujet mais je l’ai posté juste au cas où quelqu’un visiterait encore cette question à la recherche de réponses, j’utilise Jasmine version 3.0 et comme mentionné par @Pasortingzio Rullo, vous pouvez utiliser toBeGreaterThanOrEqual / toBeLessThanOrEqual .

Il a été ajouté dans la version 2.5 selon les notes de publication – https://github.com/jasminee/jasminee/blob/master/release_notes/2.5.0.md

Par exemple

 expect(percent).toBeGreaterThanOrEqual(1,"This is optional expect failure message"); 

ou

 expect(percent).toBeGreaterThanOrEqual(1);