আমি কীভাবে পরীক্ষা করতে পারি যে জেসমিনে একটি মান "এর চেয়ে বড় বা সমান"?


97

আমি নিশ্চিত করতে চাই যে একটি মান দশমিক (বা 0), সুতরাং সংখ্যাটি শূন্যের চেয়ে বড় বা সমান এবং 1 এর চেয়ে কম হওয়া উচিত।

describe('percent',function(){  

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

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

  });

});

আমি কীভাবে "> = 0" নকল করব?



4
চেষ্টা করুন:expect(percent).not.toBeLessThan(0);
jcubic

4
নীচের উত্তরে @ পাত্রিজিও রুলো দ্বারা উল্লিখিত হিসাবে, তার ম্যাচারগুলি একত্রীকরণ করা হয়েছে Jas জেসমিন ২.6 এ এখন একটি টু বিগ্রিটারথ্যানঅরকুয়াল ম্যাচার পাওয়া যায়: জেসমিন. github.io/api/2.6/matchers.html#toBeGreaterThanOrEqual
ক্রিস পার্টন

উত্তর:


110

আমি অনুভব করেছি যে এপিআই জেসমিনের নতুন সংস্করণগুলিতে পরিবর্তিত হওয়ায় আমার এটি আপডেট করা উচিত। জেসমিন এপিআই এখন এর জন্য ফাংশনগুলিতে তৈরি করেছে:

  • toBeGreaterThanOrEqual
  • toBeLessThanOrEqual

নীচের পরামর্শের তুলনায় আপনার এই ফাংশনগুলি ব্যবহার করা উচিত।

জেসমিন ম্যাচার্স এপিআই সম্পর্কে আরও তথ্যের জন্য এখানে ক্লিক করুন


আমি জানি যে এটি একটি পুরানো এবং সমাধান হওয়া প্রশ্ন, তবে আমি লক্ষ্য করেছি যে একটি মোটামুটি ঝরঝরে সমাধান মিস হয়ে গেছে। যেহেতু বৃহত্তর বা সমান হ'ল ফাংশনের চেয়ে কম বিপরীত হয় তাই চেষ্টা করুন:

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

এই পদ্ধতির মধ্যে শতাংশের মান একটি অ্যাসিঙ্ক ফাংশন দ্বারা ফিরে আসতে পারে এবং নিয়ন্ত্রণ প্রবাহের অংশ হিসাবে প্রক্রিয়া করা যায়।


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এটি একটি সংখ্যা বলে মনে করেন তবে এটি কেবল বিপরীত হয়
Otherwise

@ ক্রিশ্চিয়ানহানেক্যাম্পের ঠিক যেমনটি উল্লেখ করা হয়েছে তেমন প্রত্যাশা নির্ভরযোগ্য নয় কারণ এটি যখন 'শতাংশ' এর মান সংখ্যা (এনএএন) না হয় তখনও পাস হয়।
রোহিত

70

আপনাকে প্রথমে তুলনা অপারেশনটি চালানো দরকার এবং তারপরে সত্যতা আছে কিনা তা পরীক্ষা করে দেখুন।

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

    var percent = insights.percent;

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

  });   
});

9
এটি কাজ করে, তবে দুর্ভাগ্যক্রমে, ব্যর্থ "> =" পরীক্ষার মাধ্যমে উত্পন্ন বার্তাটি বিশেষভাবে অভিব্যক্তিপূর্ণ নয় ("প্রত্যাশিত মিথ্যা সত্য হতে পারে")। এবং যাইহোক, পরীক্ষাটি async হওয়ার দরকার নেই (ঠিক আছে, কেবল নিটপিকিং করা;)।
হ্যাশচেঞ্জ

4
@ হ্যাশচেঞ্জ যেমন জেসমিন 2-কাস্টম-বার্তার মতো প্লাগইন সহ ত্রুটি বার্তাটি অনুকূলিতকরণ করা যায়:since('expected percent to be greater than or equal to zero').expect(percent >= 0).toBeTruthy();
টাচিয়োনভর্টেক্স

পছন্দ করুন আমি এই জিনিস সম্পর্কে জানতাম না। সাধারণ তুলনাগুলির জন্য >=, আমি একটি কাস্টম ম্যাচারের পছন্দ করি কারণ এটি পরীক্ষাগুলি নিরবিচ্ছিন্ন করে রাখে (করণীয় সহজ, নীচে আমার উত্তরটি দেখুন), তবে তুলনামূলকভাবে যা কম ঘন ঘন আসে, বা যথেষ্ট পরিমাণে প্রকাশ পায় না, সেই প্লাগইনটি হুবহু বলে মনে হয় সঠিক বস্তু. ধন্যবাদ!
হ্যাশচেঞ্জ

expect(percent).toBeGreaterThan(-1);এক্সডি সম্পর্কে কী আমি চেষ্টা করে দেখিনি
সাইরিল CHAPON

15

জেসমিনের বর্তমান সংস্করণটি বিগ্রিটারথান এবং টুবেলসথানকে সমর্থন করে।

expect(myVariable).toBeGreaterThan(0);

4
প্রশ্নটি "এর চেয়ে বড় বা সমান" জিজ্ঞাসা করেছে
স্টিলথথিনেঞ্জ

6

আমি এটির জন্য দেরী করছি তবে কেবল উত্তর দেওয়ার জন্য কেউ এই প্রশ্নটি দেখার জন্য পোস্ট করছে তবে আমি জেসমিন সংস্করণ ৩.০ ব্যবহার করছি এবং @ প্যাট্রিজিও রুলো দ্বারা উল্লিখিত হিসাবে আপনি বেগ্রিটারথ্যানঅরকিউয়াল / টু বিলেসথ্যানঅরকুয়াল ব্যবহার করতে পারেন ।

রিলিজ নোট অনুসারে এটি 2.5 সংস্করণে যুক্ত করা হয়েছিল - https://github.com/jasmine/jasmine/blob/master/re कृपया_notes/ 2.5.0.md

যেমন যেমন

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

বা

expect(percent).toBeGreaterThanOrEqual(1);

আমি মনে করি জুঁই সংস্করণ> ২.৩.৪ ক্রমান্বিতভাবে চশমা চালায় না। সুতরাং যদি তারা ক্রমে ক্রম চান তবে তারা কাস্টম ম্যাচার তৈরি করতে পারে তবে যদি তারা বিনা অর্ডারযুক্ত চশমাতে ঠিক থাকে তবে তারা উপরের বর্ণিত সংস্করণটি চয়ন করতে পারে।
ট্রেক্সএক্স

5

কিছুটা শ্বাসরুদ্ধকর এটি মৌলিক কার্যকারিতা নয়

আপনি এটির মতো একটি কাস্টম ম্যাচার যুক্ত করতে পারেন:

জেসমিন এক্সটেনশনস.জেএস

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

বাস্তবে আপনি আপনার ম্যাচারের জন্য একজন নির্ধারককে সংজ্ঞায়িত করছেন - এটি এমন একটি ফাংশন যা কোনও ম্যাচারের অবজেক্টকে ফিরিয়ে দেয়।

আপনি 'বুট' করার আগে এটি অন্তর্ভুক্ত করুন। বেসিক ম্যাথারগুলি বুট করার সময় লোড হয়।

আপনার এইচটিএমএল ফাইলটি দেখতে এমন হওয়া উচিত:

<!-- 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>

তারপরে আপনার বুট.জেজে জুঁই সংজ্ঞায়িত হওয়ার পরে কিন্তু জুঁই.জেটইএনভি () এর আগে ম্যাচার যুক্ত করার জন্য কলটি যুক্ত করুন। Get env আসলে একটি সেটআপ কল (সামান্য বিভ্রান্তিকরভাবে নাম দেওয়া)।

ম্যাচকারীরা এনভ কনস্ট্রাক্টরে সেটআপকোরম্যাচার্সের কলটিতে সেটআপ পান।

/**
 * ## 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();

তারা নমুনা পরীক্ষায় কাস্টম matchers যোগ করার অন্য উপায় দেন, তবে এটার কাজের ধরনে একটি ব্যবহার প্রতিটি পরীক্ষার আগে মিলকারীর (গুলি) পুনঃ হয় beforeEach। এটি বেশ ভয়ঙ্কর বলে মনে হচ্ছে তাই আমি ভেবেছিলাম পরিবর্তে এই পদ্ধতির সাথে যাব।


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

আপনার প্রয়োজনীয় ম্যাথারগুলি যুক্ত করতে এটি কেবল জেসমিন গিটহাব মাস্টার শাখায় আমার প্যাচে মার্জ করা হয়েছিল:

বিগ্রেটথ্যানঅরকুয়াল এবং বেলেসথ্যানঅরকুয়াল ম্যাচারগুলিতে যুক্ত করুন

তবে এটি কোন রিলিজ হবে তা আমার ধারণা নেই। কিছুক্ষণের মধ্যে, আপনি আমার স্থানীয় জেসমিন অনুলিপিতে আমার প্রতিশ্রুতিবদ্ধ কোডটি ব্যবহার করার চেষ্টা করতে পারেন।


এটা তোলে মুক্তি 2.5.0 মধ্যে মিশে গেছে github.com/jasmine/jasmine/blob/master/release_notes/2.5.0.md
Patrizio Rullo

1

আমি এই জুঁই প্লাগিংটি ব্যবহার করার পরামর্শ দিচ্ছি: https://github.com/JamieMason/ জেসমিন- ম্যাথার্স


এতে একটি 'ইন রেঞ্জ'-ম্যাচার রয়েছে তবে 'বৃহত্তর বা সমান' / 'কম বা সমান' ম্যাচার নয়, যদিও ...
ভেগার

@ ওয়েগার, আপনি প্রত্যাশা (সংখ্যা) ব্যবহার করতে পারেন।
ব্রোদা নোয়েল

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);
জনাথন মূল Levesque
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.