อะไรassert
หมายถึงใน JavaScript?
ฉันเคยเห็นบางสิ่งเช่น:
assert(function1() && function2() && function3(), "some text");
และต้องการทราบว่าวิธีการassert()
ทำ
อะไรassert
หมายถึงใน JavaScript?
ฉันเคยเห็นบางสิ่งเช่น:
assert(function1() && function2() && function3(), "some text");
และต้องการทราบว่าวิธีการassert()
ทำ
คำตอบ:
ไม่มีassert
ใน JavaScript (ยังมีการพูดของการเพิ่มแต่มันอยู่ในช่วงเริ่มต้น) บางทีคุณอาจใช้ห้องสมุดที่ให้บริการ ความหมายปกติคือการโยนข้อผิดพลาดหากการแสดงออกผ่านเข้าไปในฟังก์ชั่นเป็นเท็จ นี้เป็นส่วนหนึ่งของแนวคิดทั่วไปของการตรวจสอบยืนยัน โดยทั่วไปแล้วการยืนยัน (ตามที่เรียกว่า) จะใช้เฉพาะใน "การทดสอบ" หรือ "การแก้ปัญหา" การสร้างและแยกออกจากรหัสการผลิต
สมมติว่าคุณมีฟังก์ชันที่ควรจะยอมรับสตริงเสมอ คุณต้องการที่จะรู้ว่าถ้ามีคนเรียกฟังก์ชั่นนั้นกับสิ่งที่ไม่ใช่สตริง ดังนั้นคุณอาจทำ:
assert(typeof argumentName === "string");
... ที่ไหนassert
จะเกิดข้อผิดพลาดหากเงื่อนไขเป็นเท็จ
รุ่นที่ง่ายมากจะมีลักษณะเช่นนี้:
function assert(condition, message) {
if (!condition) {
throw message || "Assertion failed";
}
}
ยังดีกว่าใช้ประโยชน์จากError
วัตถุหากเอ็นจิ้น JavaScript รองรับมัน (อันที่จริงแล้วอาจไม่เก่า) ซึ่งมีข้อดีในการรวบรวมสแต็กการติดตามและเช่น:
function assert(condition, message) {
if (!condition) {
message = message || "Assertion failed";
if (typeof Error !== "undefined") {
throw new Error(message);
}
throw message; // Fallback
}
}
แม้แต่ IE8 ก็มีError
(แม้ว่ามันจะไม่มีstack
คุณสมบัติ แต่มีเอ็นจิ้นที่ทันสมัย
if(!condition)
คือการตั้งค่าvar throwError=true;
แล้วแล้วห่อส่วนจากเส้นข้างในdebugger;
if(throwError)
ด้วยวิธีนี้ถ้าฉันเปิดดีบักเกอร์มันจะพังและถ้าฉันปรารถนาที่จะตั้งค่าthrowError
เป็นเท็จจากนั้นตรวจสอบขอบเขตทั้งหมดในขณะที่ก้าวออกไป
throw
ในแหล่งที่มาของแท็บโดยอัตโนมัติและจะทำลายที่ ด้วยวิธีนี้คุณไม่จำเป็นต้องมีdebugger;
คำสั่ง ดูdeveloper.chrome.com/devtools/docs/…สำหรับข้อมูลเพิ่มเติม
if
กับโอเปอเรเตอร์ที่มีเงื่อนไข Error
อย่างไรก็ตามในโลกของวันนี้ฉันจะไม่รำคาญที่จะสนับสนุนเครื่องมือที่ไม่ได้มี
หากใช้เบราว์เซอร์ที่ทันสมัยหรือ nodejs console.assert(expression, object)
คุณสามารถใช้
สำหรับข้อมูลเพิ่มเติม:
console.error
ในรหัสที่ยังดำเนินการอยู่
console.assert
throw
console.assert
เป็นเพราะการยืนยันไม่ใช่ฟังก์ชั่นการจัดการข้อผิดพลาด พวกเขาถูกออกแบบมาสำหรับการตรวจสอบความถูกต้องของรหัสในระหว่างการพัฒนาเท่านั้น โดยทั่วไปแล้วพวกเขาจะถูกปิดการใช้งานอย่างสมบูรณ์ในสภาพแวดล้อมการผลิตเพื่อหลีกเลี่ยงการใช้งานระบบสดเพราะสิ่งเล็ก ๆ น้อย ๆ เบราว์เซอร์นั้นถือว่าเป็นสภาพแวดล้อมที่ใช้งานจริงดังนั้นจึงconsole.assert
ไม่ยุติการดำเนินการที่นั่น หากคุณพึ่งพาการยืนยันที่จะหยุดการดำเนินการคุณควรใช้การจัดการข้อผิดพลาดที่เหมาะสมแทนเนื่องจากนี่ไม่ใช่สิ่งที่ยืนยันไว้
คำตอบอื่น ๆ นั้นดี: ไม่มีฟังก์ชั่นยืนยันที่สร้างไว้ใน ECMAScript5 (เช่น JavaScript ที่ใช้งานได้ทุกที่) แต่เบราว์เซอร์บางตัวมอบให้กับคุณหรือมีส่วนเสริมที่ให้การทำงานนั้น ในขณะที่มันอาจจะดีที่สุดในการใช้ห้องสมุดที่ได้รับการยอมรับ / เป็นที่นิยม / ไว้สำหรับเรื่องนี้เพื่อวัตถุประสงค์ด้านการศึกษาฟังก์ชั่น "คนยากจนยืนยัน" อาจมีลักษณะเช่นนี้:
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
try
, catch
, throw
)
assert()
ไม่ใช่ฟังก์ชันจาวาสคริปต์ดั้งเดิม มันเป็นฟังก์ชั่นที่กำหนดเองที่ใครบางคนทำ คุณจะต้องมองหามันบนหน้าของคุณหรือในไฟล์ของคุณและโพสต์มันให้ใครก็ได้เพื่อช่วยตัดสินว่ามันทำอะไรอยู่
ตรวจสอบสิ่งนี้: http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-quick-and-easy-javascript-testing-with-assert/
มันมีไว้สำหรับทดสอบ JavaScript น่าอัศจรรย์ที่แทบจะไม่ห้าหรือหกบรรทัดโค้ดนี้ให้ระดับพลังที่ยอดเยี่ยมและควบคุมรหัสของคุณเมื่อทำการทดสอบ
ฟังก์ชัน assert ยอมรับพารามิเตอร์สองตัว:
ผลลัพธ์: บูลีนซึ่งอ้างอิงว่าการทดสอบของคุณผ่านหรือไม่
คำอธิบาย: คำอธิบายสั้น ๆ ของการทดสอบของคุณ
ฟังก์ชั่นยืนยันนั้นเพียงสร้างรายการรายการใช้คลาส“ ผ่าน” หรือ“ ล้มเหลว” ขึ้นอยู่กับว่าการทดสอบของคุณคืนค่าเป็นจริงหรือเท็จจากนั้นผนวกคำอธิบายต่อท้ายรายการ ในที่สุดบล็อกของการเข้ารหัสนั้นจะถูกเพิ่มไปยังหน้า มันง่ายมาก แต่ทำงานได้อย่างสมบูรณ์
นี่คือการใช้งานง่าย ๆ ของฟังก์ชั่นการยืนยัน ใช้ค่าและคำอธิบายของสิ่งที่คุณกำลังทดสอบ
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');
หากการยืนยันเป็นเท็จข้อความจะปรากฏขึ้น โดยเฉพาะถ้าอาร์กิวเมนต์แรกเป็นเท็จอาร์กิวเมนต์ที่สอง (ข้อความสตริง) จะถูกบันทึกไว้ในคอนโซลเครื่องมือสำหรับนักพัฒนา ถ้าอาร์กิวเมนต์แรกเป็นจริงไม่มีอะไรเกิดขึ้น ตัวอย่างง่ายๆ - ฉันใช้เครื่องมือสำหรับนักพัฒนาของ Google:
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.');
อาจมาพร้อมกับห้องสมุดทดสอบที่บางรหัสของคุณใช้อยู่ นี่คือตัวอย่างหนึ่ง (โอกาสที่มันไม่เหมือนกับไลบรารีที่คุณใช้ แต่มันแสดงให้เห็นถึงแนวคิดทั่วไป):
คำหรือฟังก์ชัน "ยืนยัน" ส่วนใหญ่จะใช้ในการทดสอบส่วนต่าง ๆ ของแอปพลิเคชัน
ฟังก์ชั่นยืนยันเป็นวิธีสั้น ๆ ในการสั่งให้โปรแกรมตรวจสอบสภาพ (หรือที่เรียกว่า "การยืนยัน") และหากเงื่อนไขไม่เป็นจริงมันจะโยนข้อผิดพลาด
ดังนั้นเรามาดูกันว่ามันจะมีลักษณะอย่างไรใน "รหัสปกติ"
if (typeof "string" === "array") {
throw Error('Error: "string" !== "array"');
}
ด้วยassert
คุณสามารถเขียน:
assert(typeof "string" === "array")
ใน Javascript ไม่มีเจ้าของภาษา assert
ฟังก์ชั่นพื้นฐานคุณจึงต้องใช้จากห้องสมุดบางแห่ง
สำหรับการแนะนำง่ายๆคุณสามารถตรวจสอบบทความนี้:
http://fredkschott.com/post/2014/05/nodejs-testing-essentials/
ฉันหวังว่ามันจะช่วย
การยืนยันยืนยันจะเกิดข้อความแสดงข้อผิดพลาดหากแอตทริบิวต์แรกเป็นเท็จและแอตทริบิวต์ที่สองคือข้อความที่จะส่งออกไป
console.assert(condition,message);
มีความคิดเห็นมากมายที่บอกว่าการยืนยันไม่มีอยู่ใน JavaScript แต่console.assert()
เป็นฟังก์ชันการยืนยันใน JavaScript แนวคิดของการยืนยันคือการค้นหาสาเหตุ / ที่จุดบกพร่องเกิดขึ้น
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);
คำตอบก่อนหน้านี้สามารถปรับปรุงได้ในแง่ของประสิทธิภาพและความเข้ากันได้
ตรวจสอบหนึ่งครั้งว่ามี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
ฟังก์ชันซึ่งไม่มีประโยชน์สำหรับการดีบัก
ถ้าคุณใช้ webpack คุณก็สามารถใช้ห้องสมุดยืนยัน Node.js แม้ว่าพวกเขาจะอ้างว่ามันเป็น "ไม่ได้ตั้งใจจะเป็นห้องสมุดยืนยันวัตถุประสงค์ทั่วไป" แต่ดูเหมือนว่าจะดีกว่าการยืนยันแบบเฉพาะกิจและดูเหมือนว่าไม่มีคู่แข่งอยู่ในพื้นที่โหนดต่อไป (ชัยได้รับการออกแบบสำหรับการทดสอบหน่วย)
const assert = require('assert');
...
assert(jqXHR.status == 201, "create response should be 201");
คุณต้องใช้ webpack หรือ browserify เพื่อให้สามารถใช้งานได้ดังนั้นจึงเห็นได้ชัดว่านี่จะมีประโยชน์ก็ต่อเมื่อสิ่งเหล่านั้นอยู่ในเวิร์กโฟลว์ของคุณแล้ว
นอกเหนือจากตัวเลือกอื่น ๆ เช่นconsole.assertหรือกลิ้งของคุณเองคุณสามารถใช้ค่าคงที่ มันมีคุณสมบัติพิเศษสองอย่าง:
%s
ระบุ)ตามที่ TJ กล่าวถึงไม่มีassert
ใน JavaScript แต่มีโมดูลโหนดชื่อยืนยันซึ่งเป็นส่วนใหญ่จะใช้สำหรับการทดสอบ ดังนั้นคุณอาจเห็นรหัสเช่น:
const assert = require('assert');
assert(5 > 7);
assert
ผมขอยืนยันว่าเป็นหนึ่งในเหตุผลที่เลวร้ายที่สุดไป