জাভাস্ক্রিপ্টে "দৃsert়তা" কী?


263

assertজাভাস্ক্রিপ্ট মানে কি ?

আমি এরকম কিছু দেখেছি:

assert(function1() && function2() && function3(), "some text");

এবং পদ্ধতিটি কী করে তা জানতে চাই assert()

উত্তর:


367

assertজাভাস্ক্রিপ্টে কোনও নেই (এখনও; এটিতে একটি যুক্ত করার কথা রয়েছে , তবে এটি প্রাথমিক পর্যায়ে রয়েছে)। সম্ভবত আপনি কিছু লাইব্রেরি ব্যবহার করছেন যা একটি সরবরাহ করে। সাধারণ অর্থটি হ'ল কোনও ক্রিয়াটিতে প্রবেশ করা এক্সপ্রেশনটি ভুল হলে একটি ত্রুটি নিক্ষেপ করা; এটি দৃ checking়তা যাচাইয়ের সাধারণ ধারণার অংশ । সাধারণত দাবিগুলি (যেমন তারা ডাকা হয়) কেবলমাত্র "টেস্টিং" বা "ডিবাগ" বিল্ডগুলিতে ব্যবহৃত হয় এবং উত্পাদন কোড থেকে সরিয়ে নেওয়া হয়।

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

assert(typeof argumentName === "string");

... assertশর্তটি মিথ্যা হলে কোথায় ত্রুটি ছুঁড়ে মারত।

খুব সাধারণ সংস্করণটি দেখতে এটির মতো হবে:

function assert(condition, message) {
    if (!condition) {
        throw message || "Assertion failed";
    }
}

আরও ভাল, Errorজাভাস্ক্রিপ্ট ইঞ্জিন যদি এটি সমর্থন করে তবে অবজেক্টটি ব্যবহার করুন (সত্যিই পুরানোগুলি নাও পারে), যার স্ট্যাক ট্রেস সংগ্রহ করার সুবিধা রয়েছে এবং এগুলি:

function assert(condition, message) {
    if (!condition) {
        message = message || "Assertion failed";
        if (typeof Error !== "undefined") {
            throw new Error(message);
        }
        throw message; // Fallback
    }
}

এমনকি আই 8 এর রয়েছে Error(যদিও এর stackসম্পত্তি নেই তবে আধুনিক ইঞ্জিনগুলি [আধুনিক আইই সহ] রয়েছে)।


6
... জেএস-এ টাইপ সম্পর্কে বড়সড় হয়ে উঠছেন? আমি বিতর্ক করব যে এটির মধ্যে অন্যতম খারাপ কারণ assert
সিএইচও

137
@ সিএইচও: বৈধ ব্যবহারের কেস রয়েছে। এটি মাথায় আসা মাত্র প্রথম উদাহরণ ছিল। উদাহরণটি বিন্দু নয়। দৃser় ধারণা ধারণা হয়।
টিজে ক্রোডার

4
আমার কোডে আমি যুক্ত করেছি এমন কিছু যা তখন if(!condition)সেট var throwError=true;হয়ে যায় debugger;তখন একটি থ্রো বিভাগটি মোড়ক করে if(throwError)। এইভাবে, যদি আমার ডিবাগারটি খোলা থাকে তবে এটি ভেঙে যাবে এবং আমি যদি ইচ্ছা করি তবে আমি throwErrorমিথ্যাতে সেট করতে পারি এবং পদক্ষেপ নেওয়ার সময় সমস্ত স্কোপগুলি পরীক্ষা করতে পারি।
রিক

8
@ রিক করুন আপনি যদি ক্রোম ডেভটুলগুলি ব্যবহার করেন তবে আপনি সোর্স ট্যাবে কেবল "আনকচড ব্যতিক্রমগুলিতে বিরতি" সক্ষম করতে পারবেন এবং এটি স্বয়ংক্রিয়ভাবে ব্রেক হয়ে যাবে throw। এইভাবে আপনার debugger;বিবৃতি দরকার নেই । আরও কিছুর জন্য বিকাশকারী.চ্রোম / দেবতুলস / ডকস / See দেখুন।
ভিকি চিজওয়ানি

1
@ ম্যাচাইনহোস্ট: আমি দেখতে পাচ্ছি না যে এটি কী "সরল", আপনি স্রেফ ifশর্তসাপেক্ষ অপারেটরের জন্য কেনাবেচা করেছেন। যাইহোক, আজকের বিশ্বে, আমি যে ইঞ্জিনগুলি নেই সেগুলি সমর্থন করার জন্য বিরক্ত করব না Error
টিজে ক্রাউডার

157

যদি কোনও আধুনিক ব্রাউজার বা নোডেজ ব্যবহার করা হয় তবে আপনি ব্যবহার করতে পারেন console.assert(expression, object)

আরও তথ্যের জন্য:


46
এফওয়াইআই, console.errorএটি কোডটি চালিয়ে যাওয়া চালিয়ে যাওয়ার মতো আরও কাজ করে।
ড্যানিয়েল সোকলোভস্কি

10
@ ড্যানিয়েলসোকলোভস্কি, ঠিক console.assertএটির মতো আচরণ না করা এতটা ভাল নয় throw
পেসারিয়ার

23
মৃত্যুদন্ড কার্যকর করার পরে যে কারণটি অব্যাহত রয়েছে console.assertতার কারণ হ'ল ফাংশন পরিচালনার ক্ষেত্রে ত্রুটি নয়। এগুলি কেবল উন্নয়নের সময় কোড যথার্থতা যাচাইয়ের জন্য ডিজাইন করা হয়েছে। Ditionতিহ্যগতভাবে তারা তুচ্ছ কিছু কারণে লাইভ সিস্টেমের অবসান এড়াতে উত্পাদন পরিবেশে সম্পূর্ণ অক্ষম are ব্রাউজারটি একটি উত্পাদন পরিবেশ হিসাবে বিবেচিত হয়, সুতরাং console.assertসেখানে কার্যকর করা বন্ধ করে দেয় না। যদি আপনি কার্য সম্পাদন বন্ধের জন্য জোরের উপর নির্ভর করে থাকেন তবে আপনার পরিবর্তে যথাযথ ত্রুটি পরিচালনা করা উচিত, কারণ এটি যা দাবি হিসাবে বোঝানো হচ্ছে তা নয়।
মালভাইনাস

8
@ রনবার্ক: ভাষা ডিজাইনাররা সিদ্ধান্ত নিয়েছিলেন "কিসের জন্য জোর দেওয়া"। ইন সি ++ [একটি বিবৃতি] ক্যাপচার প্রোগ্রামিং ত্রুটি, না ব্যবহারকারী বা রান-টাইম এরর করার জন্য ডিজাইন করা, যেহেতু এটি সাধারণত পরে একটি প্রোগ্রাম তার ডিবাগিং ফেজ প্রস্থান করে নিষ্ক্রিয় করা হয়েছে। পিএইচপি বলছে থাম্বের নিয়ম হিসাবে আপনার কোডটি সর্বদা সঠিকভাবে কাজ করতে সক্ষম হওয়া উচিত যদি দৃ .়তা পরীক্ষা করা সক্রিয় হয় না। প্যাসিভ ভয়েসটি ব্যক্তিগত পছন্দকে কর্তৃত্ব দেওয়ার উদ্দেশ্যে নয়, বরং ব্যাপকভাবে গৃহীত সাধারণ অনুশীলনকে রিপোর্ট করা।
মালভাইনাস

4
@ ডন: পয়েন্ট তোলা হয়েছে তবে আমি লিঙ্কযুক্ত পৃষ্ঠাগুলি থেকে উদ্ধৃতি দিচ্ছিলাম। আমি বিশ্বাস করি যে দৃser় প্রতিজ্ঞাগুলি তাদের অক্ষম করা যেতে পারে এমনভাবেই আচরণ করা উচিত, কেবলমাত্র যদি আপনার কোড একদিন এমন কেউ ব্যবহার করেন যে এটি নিরাপদ বলে মনে করে। যদি আপনার কোডগুলির পক্ষে জোরালো বিবেচনা করা হয়, তবে আমি মনে করি যে সত্যিকারের সম্পাদন বন্ধ করার গ্যারান্টিযুক্ত ডিবাগিং পদ্ধতিতে নির্ভর করার পরিবর্তে যথাযথ ত্রুটি পরীক্ষা করে তাদের সত্যিকারের আপগ্রেড করা উচিত। উল্লেখ করার দরকার নেই যে আপনার কোডটি উত্পাদন পরিবেশে বারবার মারা যাওয়ার সাথে সাথে যখন এটি কেবল একটি ত্রুটি ফিরিয়ে দিতে পারে এবং চালিয়ে যেতে পারে তবে এটি তার মূল্যবোধের চেয়ে আরও বেশি চাপ সৃষ্টি করতে পারে!
মালভাইনাস

29

অন্যান্য উত্তরগুলি ভাল: ECMAScript5- এ অন্তর্নিহিত একটি দাবী ফাংশন নেই (যেমন জাভাস্ক্রিপ্ট যা মূলত সর্বত্র কাজ করে) তবে কিছু ব্রাউজার আপনাকে এটি দেয় বা অ্যাড-অনগুলি দেয় যা সেই কার্যকারিতা সরবরাহ করে। যদিও এটির জন্য সম্ভবত একটি প্রতিষ্ঠিত / জনপ্রিয় / রক্ষণাবেক্ষণ করা লাইব্রেরি ব্যবহার করা সবচেয়ে ভাল, তবে একাডেমিক উদ্দেশ্যে "দরিদ্র ব্যক্তির দাবী" ফাংশনটি এর মতো দেখতে পারে:

const assert = function(condition, message) {
    if (!condition)
        throw Error('Assert failed: ' + (message || ''));
};

assert(1 === 1); // Executes without problem
assert(false, 'Expected true');
// Yields 'Error: Assert failed: Expected true' in console


বিটিডাব্লু, সহজেই এটি এটিকে সংশোধন করতে পারে যাতে এটি কেবলমাত্র বিকাশের পরিবেশে ত্রুটি ছুঁড়ে ফেলে (যেমন: শর্তসাপেক্ষে / অন্যকে যুক্ত করে অন্যকে মোড়ানো দ্বারা) এবং অন্যথায় কিছুই না করে বা কেবল একটি সতর্কতা প্রিন্ট করে। ব্যক্তিগতভাবে, আমার মতামতটি হল যে দাবিগুলি কেবল পরীক্ষার কোডে থাকা উচিত (উদাহরণস্বরূপ প্রত্যাশিত এবং আসল ফলাফলের মিল রয়েছে কিনা তা পরীক্ষা করা); উৎপাদন কোডে তারা উভয় হতে অতিরিক্ত (নকশা দ্বারা সঠিক গ্যারান্টিযুক্ত) উচিত এবং এইভাবে সরানো বা শুধুমাত্র ব্যবহারকারীর / বহিরাগত ইনপুট যে ক্ষেত্রে তারা যুক্তি ও মান ব্যতিক্রম হ্যান্ডলিং (যেমন sanitizing দ্বারা প্রতিস্থাপিত হতে পারে পাহারা জন্য try, catch, throw)
iX3

8

assert()নেটিভ জাভাস্ক্রিপ্ট ফাংশন নয়। এটি কেউ তৈরি একটি কাস্টম ফাংশন। আপনাকে এটি আপনার পৃষ্ঠায় বা আপনার ফাইলগুলিতে সন্ধান করতে হবে এবং এটি কী করছে তা নির্ধারণের জন্য কারও জন্য এটি পোস্ট করতে হবে।


5

এটি দেখুন: http://net.tutsplus.com/tutorials/ javascript-ajax / quick-tip-quick-and-easy-javascript-testing-with-assert/

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

আসক্তি ফাংশন দুটি পরামিতি গ্রহণ করে:

ফলাফল: একটি বুলিয়ান, যা আপনার পরীক্ষাটি পাস করেছে বা ব্যর্থ হয়েছে কিনা তা উল্লেখ করে

বর্ণনা: আপনার পরীক্ষার একটি সংক্ষিপ্ত বিবরণ।

জোর ফাংশনটি কেবলমাত্র একটি তালিকা আইটেম তৈরি করে, আপনার পরীক্ষার সত্য বা মিথ্যা ফিরে আসে কিনা তার উপর নির্ভর করে কোনও "পাস" বা "ব্যর্থ" শ্রেণীর প্রয়োগ করে এবং তারপরে তালিকা আইটেমটিতে বিবরণ যুক্ত করে। শেষ অবধি, কোডে থাকা সেই ব্লকটি পৃষ্ঠাতে যুক্ত করা হবে। এটি ক্রেজি সহজ, তবে পুরোপুরি কাজ করে।


4

এখানে আসক্তি ফাংশনটির একটি খুব সহজ বাস্তবায়ন। আপনি যা পরীক্ষা করছেন তার একটি মান এবং একটি বিবরণ লাগে।

 function assert(value, description) {
        var result = value ? "pass" : "fail";
        console.log(result + ' - ' +  description); 
    };

মানটি যদি সত্যের কাছে মূল্যায়ন করে তবে এটি পাস হয়।

assert (1===1, 'testing if 1=1');  

যদি এটি মিথ্যা ফেরত দেয় তবে এটি ব্যর্থ হয়।

assert (1===2, 'testing if 1=1');

1
একটি দৃser়তার উদ্দেশ্য তথ্য স্তরের স্টাডাউটে লগইন করা নয়, তবে প্রোগ্রামটি কার্যকর করা বন্ধ করে দেওয়া (সাধারণত একটি ব্যতিক্রম উত্থাপন করা) এবং স্টারারে লগ ইন করা যদি দাবিটি মিথ্যা হিসাবে মূল্যায়ন করা হয়।
নুনো আন্দ্রে

4

যদি দাবিটি মিথ্যা হয় তবে বার্তাটি প্রদর্শিত হবে। বিশেষত, যদি প্রথম যুক্তিটি মিথ্যা হয় তবে দ্বিতীয় যুক্তি (স্ট্রিং বার্তা) বিকাশকারী সরঞ্জামগুলির কনসোলে লগ হবে be প্রথম যুক্তি যদি সত্য হয় তবে মূলত কিছুই হয় না। একটি সাধারণ উদাহরণ - আমি গুগল বিকাশকারী সরঞ্জাম ব্যবহার করছি:

var isTrue = true;
var isFalse = false;
console.assert(isTrue, 'Equals true so will NOT log to the console.');
console.assert(isFalse, 'Equals false so WILL log to the console.');

3

এটি সম্ভবত একটি টেস্টিং লাইব্রেরি নিয়ে এসেছে যা আপনার কোড ব্যবহার করছে। এর একটি উদাহরণ এখানে রয়েছে (আপনার কোডটি যেভাবে ব্যবহার করছে এটি একই লাইব্রেরি নয়, তবে এটি সাধারণ ধারণাটি দেখায়) এর সম্ভাবনা রয়েছে:

http://chaijs.com/guide/styles/#assert


2

শব্দ বা ফাংশন "assert" বেশিরভাগ প্রয়োগের অংশগুলির পরীক্ষার জন্য ব্যবহৃত হয়।

অবস্থার কার্যকারিতা হ'ল শর্তটি যাচাই করার জন্য প্রোগ্রামটিকে নির্দেশ দেওয়ার একটি সংক্ষিপ্ত উপায় (এটি "দৃser়তা "ও বলা হয়) এবং শর্তটি সত্য না হলে এটি ত্রুটি ছুঁড়ে দেবে।

সুতরাং আসুন দেখে নেওয়া যাক এটি "সাধারণ কোড" তে কেমন দেখাচ্ছে

if (typeof "string" === "array") { throw Error('Error: "string" !== "array"'); }

আপনার সাথে assertসহজভাবে লিখতে পারেন:

assert(typeof "string" === "array")

জাভাস্ক্রিপ্টে কোনও নেটিভ assertফাংশন নেই, তাই আপনাকে কিছু লাইব্রেরি থেকে একটি ব্যবহার করতে হবে।

সাধারণ পরিচিতির জন্য, আপনি এই নিবন্ধটি পরীক্ষা করতে পারেন:

http://fredkschott.com/post/2014/05/nodejs-testing-essentials/

আমি আসা করি এটা সাহায্য করবে.


2

প্রথম বৈশিষ্ট্যটি মিথ্যা হলে দৃ As়তা ত্রুটি বার্তা নিক্ষেপ করে এবং দ্বিতীয় বৈশিষ্ট্যটি বার্তা নিক্ষেপ করা হয়।

console.assert(condition,message);

জাভাস্ক্রিপ্টে দৃser়তার উপস্থিতি নেই বলে অনেক মন্তব্য রয়েছে তবে console.assert()এটি জাভাস্ক্রিপ্টে দৃ .় ফাংশন যা বাগটি কেন / কোথায় ঘটে তা সন্ধানের ধারণা।

console.assert(document.getElementById("title"), "You have no element with ID 'title'");
console.assert(document.getElementById("image"), "You have no element with ID 'image'");

বার্তাটির উপর নির্ভর করে আপনি বাগটি কী তা খুঁজে পেতে পারেন। এই ত্রুটি বার্তাগুলি লাল রঙে কনসোলে প্রদর্শিত হবে যেন আমরা console.error();
কনসোল এক্সিকিউটে আরও ফাংশন দেখতে বলিconsole.log(console);


1

পূর্ববর্তী উত্তরগুলি পারফরম্যান্স এবং সামঞ্জস্যের দিক থেকে উন্নত করা যেতে পারে।

যদি অবজেক্টটি উপস্থিত না হয় তবে একবার তা পরীক্ষা করুন Error:

if (typeof Error === "undefined") {
    Error = function(message) {
        this.message = message;
    };
    Error.prototype.message = "";
}

তারপরে, প্রতিটি দৃ়তা শর্তটি পরীক্ষা করবে এবং সর্বদা একটি Errorবস্তুকে ফেলে দেবে

function assert(condition, message) {
    if (!condition) throw new Error(message || "Assertion failed");
}

মনে রাখবেন যে কনসোলটি আসল ত্রুটি লাইন নম্বরটি প্রদর্শন করবে না, তবে assertফাংশনের লাইনটি , যা ডিবাগিংয়ের জন্য কার্যকর নয়।


1

আপনি যদি ওয়েবপ্যাকটি ব্যবহার করেন তবে আপনি কেবল নোড.জেএসএস স্টোর লাইব্রেরি ব্যবহার করতে পারেন । যদিও তারা দাবি করে যে এটি "সাধারণ উদ্দেশ্য অনুসারে পাঠাগার হওয়ার উদ্দেশ্যে নয়", এটি অ্যাড-হকের দাবিগুলির পক্ষে ঠিক আছে বলে মনে হয় এবং নোড স্পেসে কোনও প্রতিদ্বন্দ্বীর উপস্থিতি নেই বলে মনে হয় (চই ইউনিট পরীক্ষার জন্য ডিজাইন করা হয়েছে)।

const assert = require('assert');
...
assert(jqXHR.status == 201, "create response should be 201");

এটি ব্যবহার করতে সক্ষম হতে আপনাকে ওয়েবপ্যাক ব্যবহার করতে হবে বা ব্রাউজ করা উচিত, সুতরাং অবশ্যই যদি এটি ইতিমধ্যে আপনার কর্মপ্রবাহে থাকে তবে এটি কার্যকর।


1

মত অন্যান্য অপশন ছাড়াও console.assert বা আপনার নিজের ঘূর্ণায়মান , আপনি ব্যবহার করতে পারেন পরিবর্তিত । এটিতে বেশ কয়েকটি অনন্য বৈশিষ্ট্য রয়েছে:

  • এটি ফর্ম্যাট করা ত্রুটি বার্তাগুলি (একটি %sনির্দিষ্টকরণকারী ব্যবহার করে ) সমর্থন করে ।
  • উত্পাদন পরিবেশে (নোড.জেএস বা ওয়েবপ্যাক পরিবেশ দ্বারা নির্ধারিত হিসাবে) ত্রুটি বার্তাটি alচ্ছিক, কিছুটা (সামান্য) ছোট .js এর অনুমতি দেয় for

0

টিজে দ্বারা যেমন উল্লেখ করা হয়েছে, assertজাভাস্ক্রিপ্টে কোনও নেই । যাইহোক, একটি নোড মডিউল নামে হয় জাহির , যা বেশিরভাগ পরীক্ষার জন্য ব্যবহৃত । সুতরাং, আপনি কোড দেখতে পাবেন:

const assert = require('assert');
assert(5 > 7);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.