मैं कैसे परीक्षण कर सकता हूं कि एक मूल्य "जैस्मीन में" से अधिक या इसके बराबर है?


96

मैं यह पुष्टि करना चाहता हूं कि एक मान एक दशमलव (या 0) है, इसलिए संख्या शून्य से अधिक या इसके बराबर और 1 से कम होनी चाहिए ।

describe('percent',function(){  

  it('should be a decimal', function() {

    var percent = insights.percent; 
    expect(percent).toBeGreaterThan(0);
    expect(percent).toBeLessThan(1);

  });

});

मैं "> = 0" की नकल कैसे करूं?



3
कोशिश करें:expect(percent).not.toBeLessThan(0);
जुबिक

2
नीचे दिए गए एक जवाब में @Patrizio Rullo से उल्लेख किया है, उसकी matchers किया गया है में विलय कर दिया अब एक toBeGreaterThanOrEqual मिलान जैस्मीन 2.6 में उपलब्ध है:। Jasmine.github.io/api/2.6/matchers.html#toBeGreaterThanOrEqual
क्रिस पार्टन

जवाबों:


109

मुझे लगा कि मुझे इसे अपडेट करना चाहिए क्योंकि एपीआई जैस्मीन के नए संस्करणों में बदल गया है। जैस्मीन एपीआई अब के लिए कार्यों में बनाया गया है:

  • toBeGreaterThanOrEqual
  • toBeLessThanOrEqual

आपको नीचे दिए गए सलाह के लिए इन कार्यों का उपयोग करना चाहिए।

जैस्मीन मैचर्स एपीआई की अधिक जानकारी के लिए यहां क्लिक करें


मुझे पता है कि यह एक पुराना और सुलझा हुआ सवाल है, लेकिन मैंने देखा कि एक काफी साफ-सुथरा समाधान छूट गया था। फ़ंक्शन से कम का व्युत्क्रम बड़ा या बराबर है, कोशिश करें:

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

इस दृष्टिकोण में, प्रतिशत का मान एक async फ़ंक्शन द्वारा वापस किया जा सकता है और नियंत्रण प्रवाह के एक भाग के रूप में संसाधित किया जा सकता है।


4
इस एक का जवाब स्वीकार किया जाना चाहिए। इसके अलावा: expect(2 + 2).not.toBe(5), expect(2 + 2).toBeGreaterThan(0),expect(2 + 2).toBeLessThan(5)
सर्गेई Panfilov

यह खतरनाक है, क्योंकि expect(NaN).not.toBeLessThan(0);असफल होने के बजाय गुजरता है। ( not.toBeLessThanकेवल उलटा है यदि आप मानते हैं कि percentयह एक संख्या है। अन्यथा, यह उलटा नहीं है।)
क्रिस्टियन हैनकैंप

जैसा कि @KristianHanekamp द्वारा बताया गया है कि यह विश्वसनीय नहीं है क्योंकि यह भी गुजरता है जब 'प्रतिशत' का मान एक संख्या (NaN) नहीं है।
रोहित

69

आपको केवल तुलना ऑपरेशन चलाने की आवश्यकता है, और फिर जांचें कि क्या यह सत्य है।

describe('percent',function(){
  it('should be a decimal',function(){

    var percent = insights.percent;

    expect(percent >= 0).toBeTruthy();
    expect(percent).toBeLessThan(1);

  });   
});

9
यह काम करता है, लेकिन दुर्भाग्य से, एक असफल "> =" परीक्षण द्वारा उत्पादित संदेश विशेष रूप से अभिव्यंजक नहीं है ("सत्य होने की उम्मीद झूठी")। और वैसे, परीक्षण के लिए async होने की कोई आवश्यकता नहीं है (ठीक है, बस नाइटपैकिंग;)।
हैशचेंज

2
@hashchange jasmine2-custom-message जैसे प्लगइन के साथ , त्रुटि संदेश को अनुकूलित किया जा सकता है:since('expected percent to be greater than or equal to zero').expect(percent >= 0).toBeTruthy();
TachyonVortex

@TachyonVortex दिलचस्प लगता है! मैं उस चीज़ के बारे में नहीं जानता था। सामान्य तुलनाओं के लिए >=, मैं एक कस्टम मिलानकर्ता को पसंद करता हूं क्योंकि यह परीक्षणों को अनियंत्रित रखता है (आसान करने के लिए पर्याप्त है, नीचे मेरा उत्तर देखें), लेकिन तुलनाओं के लिए जो कम बार आते हैं, या पर्याप्त अभिव्यंजक नहीं हैं, यह प्लगइन बिल्कुल लगता है सही बात। धन्यवाद!
hashchange

expect(percent).toBeGreaterThan(-1);XD के बारे में मैंने क्या कोशिश नहीं की
सिरिल चैपॉन

15

जैस्मीन का वर्तमान संस्करण बेगेटेरिटेशन और बब्लेसथन का समर्थन करता है।

expect(myVariable).toBeGreaterThan(0);

1
प्रश्न पूछा गया "
स्टील्थेंनिजा

5

कुछ हद तक यह बुनियादी कार्यक्षमता नहीं है

आप इस तरह से एक कस्टम मैचर जोड़ सकते हैं:

JasmineExtensions.js

yourGlobal.addExtraMatchers = function () {
    var addMatcher = function (name, func) {
        func.name = name;
        jasmine.matchers[name] = func;
    };

    addMatcher("toBeGreaterThanOrEqualTo", function () {
                   return {
                       compare: function (actual, expected) {
                           return {
                               pass: actual >= expected
                           };
                       }
                   };
               }
    );
};

वास्तव में आप अपने मिलानकर्ता के लिए एक कंस्ट्रक्टर को परिभाषित कर रहे हैं - यह एक फ़ंक्शन है जो एक मिलानकर्ता ऑब्जेक्ट को लौटाता है।

इससे पहले कि आप 'बूट' को शामिल करें। मूल मिलान बूट समय पर लोड किए जाते हैं।

आपकी html फ़ाइल इस तरह दिखनी चाहिए:

<!-- jasmine test framework-->
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>

<!-- custom matchers -->
<script type="text/javascript" src="Tests/JasmineExtensions.js"></script>
<!-- initialisation-->
<script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>

फिर अपने boot.js में चमेली को परिभाषित करने के बाद मिलान करने वालों को जोड़ने के लिए कॉल जोड़ें, लेकिन चमेली से पहले ।getEnv ()। Get env वास्तव में एक (थोड़ा भ्रामक नाम दिया गया) सेटअप कॉल है।

मैच करने वालों को Env कंस्ट्रक्टर में SetupCoreMatchers पर कॉल करने के लिए सेटअप मिलता है।

/**
 * ## Require &amp; Instantiate
 *
 * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference.
 */
window.jasmine = jasmineRequire.core(jasmineRequire);
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.
 */
jasmineRequire.html(jasmine);

/**
 * Create the Jasmine environment. This is used to run all specs in a project.
 */
var env = jasmine.getEnv();

वे नमूना परीक्षणों में कस्टम मिलान करने वालों को जोड़ने का एक और तरीका दिखाते हैं, हालांकि यह जिस तरह से काम करता है वह प्रत्येक का उपयोग करके प्रत्येक परीक्षण से पहले माचिस को फिर से बनाना है beforeEach। यह बहुत भयानक लगता है इसलिए मैंने सोचा कि मैं इसके बजाय इस दृष्टिकोण के साथ जाऊंगा।


5

मुझे इसमें देर हो गई है, लेकिन इसे बस पोस्ट करने की स्थिति में कुछ लोग अभी भी इस सवाल का जवाब तलाश रहे हैं, मैं जैस्मीन संस्करण 3.0 का उपयोग कर रहा हूं और जैसा कि @Patrizio Rullo द्वारा उल्लेख किया गया है आप उपयोग कर सकते हैं toBeGraitThanOrEqual / toBeLessThanOrEqual

इसे जारी किए गए नोटों के अनुसार संस्करण 2.5 में जोड़ा गया था - https://github.com/jasmine/jasmine/blob/master/release_notes/2.5.0.md

उदाहरण के लिए

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

या

expect(percent).toBeGreaterThanOrEqual(1);

मुझे लगता है कि चमेली संस्करण> 2.3.4 क्रम में चश्मा निष्पादित नहीं करता है। इसलिए यदि वे क्रम में चश्मा चाहते हैं तो वे कस्टम मैचर्स बना सकते हैं लेकिन यदि वे बिना किसी क्रम के चश्मा के साथ ठीक हैं तो वे उपर्युक्त संस्करण चुन सकते हैं।
ट्रैक्सएक्स

4

मैं आज भी उसी मुद्दे पर चल रहा हूं, और जैसा कि यह पता चला है, इसके लिए एक कस्टम मैचर को जोड़ना उतना मुश्किल नहीं है। एक कस्टम मिलानकर्ता का मुख्य लाभ यह है कि यह एक परीक्षण विफल होने पर सार्थक संदेश वापस कर सकता है।

तो यहां दो मिलानकर्ताओं के लिए कोड है, .toBeAtLeast()और .toBeAtMost(), अगर यह किसी की मदद करता है।

beforeEach( function () {

  // When beforeEach is called outside of a `describe` scope, the matchers are
  // available globally. See http://stackoverflow.com/a/11942151/508355

  jasmine.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;
        }
      };
    }

  } );

} );

4

यह सिर्फ जैस्मीन GitHub मास्टर शाखा मेरी पैच में विलय किया गया था ताकि आप की जरूरत मैचर्स जोड़ने के लिए:

ToBeGreatThanOrEqual और toBeLessThanOrEqual मिलान जोड़ें

लेकिन मुझे नहीं पता कि यह किस रिलीज में होगा। थोड़ी देर में, आप अपनी स्थानीय जैस्मीन की नकल में मेरी प्रतिबद्धता के कोड का उपयोग करने का प्रयास कर सकते हैं।



1

मैं इस जैस्मीन प्लगिंग का उपयोग करने की सलाह देता हूं: https://github.com/JamieMason/Jasmine-Matchers


इसमें एक 'रेंज-मैचर' है, लेकिन 'बड़ा या बराबर' / 'कम या बराबर' मिलान करने वाला नहीं है, हालांकि ...
8

@ वेगर, आप अपेक्षा (संख्या) .toBeGraitThan (संख्या) का उपयोग कर सकते हैं;
बड़ौदा नोएल

1

आप फ़ंक्शन leastका उपयोग यह जांचने के लिए कर सकते हैं कि क्या मान किसी अन्य मान से अधिक या बराबर है।

के उपनाम leastहै gte(से महान या बराबर)। इसके विपरीत, आप lteविपरीत की जांच करने के लिए (कम या अधिक) का उपयोग कर सकते हैं ।

तो, सवाल का जवाब देने के लिए, आप कर सकते हैं:

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


आप जैस्मीन के किस संस्करण का उपयोग करते हैं? मैं 2.6.2 से 2.8 के लिए नवीनीकरण सिर्फ और मैं अभी भी त्रुटि मिल TypeError: Cannot read property 'be' of undefinedके लिएexpect(1).to.be.gte(-1);
जोनाथन जनक लेवेस्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.