Câu trả lời:
Không có assert
JavaScript (chưa có, nói về việc thêm một , nhưng nó ở giai đoạn đầu). Có lẽ bạn đang sử dụng một số thư viện cung cấp một. Ý nghĩa thông thường là ném lỗi nếu biểu thức được truyền vào hàm là sai; đây là một phần của khái niệm chung về kiểm tra khẳng định . Thông thường các xác nhận (như chúng được gọi) chỉ được sử dụng trong các bản dựng "thử nghiệm" hoặc "gỡ lỗi" và loại bỏ mã sản xuất.
Giả sử bạn có một hàm được cho là luôn chấp nhận một chuỗi. Bạn muốn biết nếu ai đó gọi hàm đó bằng một chuỗi không phải là một chuỗi. Vì vậy, bạn có thể làm:
assert(typeof argumentName === "string");
... Trường hợp assert
sẽ ném một lỗi nếu điều kiện là sai.
Một phiên bản rất đơn giản sẽ như thế này:
function assert(condition, message) {
if (!condition) {
throw message || "Assertion failed";
}
}
Tốt hơn nữa, hãy sử dụng Error
đối tượng nếu công cụ JavaScript hỗ trợ nó (những cái thực sự cũ có thể không), có lợi thế là thu thập dấu vết ngăn xếp và như vậy:
function assert(condition, message) {
if (!condition) {
message = message || "Assertion failed";
if (typeof Error !== "undefined") {
throw new Error(message);
}
throw message; // Fallback
}
}
Ngay cả IE8 cũng có Error
(mặc dù nó không có stack
tài sản, nhưng các công cụ hiện đại [bao gồm cả IE hiện đại] thì có).
if(!condition)
được thiết lập var throwError=true;
sau đó debugger;
sau đó quấn phần ném trong một if(throwError)
. Theo cách đó, nếu tôi mở trình gỡ lỗi, nó sẽ bị throwError
hỏng và nếu tôi muốn, tôi có thể đặt thành sai và sau đó kiểm tra tất cả các phạm vi trong khi bước ra ngoài.
throw
. Bằng cách đó bạn không cần debugger;
tuyên bố. Xem developer.chrome.com/devtools/docs/v để biết thêm.
if
cho một nhà điều hành có điều kiện. Dù sao, trong thế giới ngày nay, tôi sẽ không bận tâm đến việc hỗ trợ các công cụ không có Error
.
Nếu sử dụng trình duyệt hiện đại hoặc nodejs, bạn có thể sử dụng console.assert(expression, object)
.
Để biết thêm thông tin:
console.error
trong đó mã tiếp tục thực thi.
console.assert
là không tốt, trừ khi nó có hành vi tương tự như throw
.
console.assert
là vì các xác nhận không phải là các hàm xử lý lỗi. Chúng được thiết kế để kiểm tra tính chính xác của mã trong quá trình phát triển. Theo truyền thống, họ bị vô hiệu hóa hoàn toàn trong môi trường sản xuất để tránh các hệ thống sống chấm dứt vì một cái gì đó tầm thường. Trình duyệt được coi là một môi trường sản xuất, vì vậy console.assert
không chấm dứt thực thi ở đó. Nếu bạn đang dựa vào các xác nhận để dừng thực thi thì bạn nên sử dụng xử lý lỗi thích hợp thay vào đó, vì đây không phải là xác nhận dành cho.
Các câu trả lời khác đều tốt: không có chức năng khẳng định nào được tích hợp trong ECMAScript5 (ví dụ: JavaScript hoạt động cơ bản ở mọi nơi) nhưng một số trình duyệt cung cấp cho bạn hoặc có các tiện ích bổ sung cung cấp chức năng đó. Mặc dù có lẽ tốt nhất là sử dụng một thư viện được thiết lập tốt / phổ biến / được duy trì cho việc này, cho mục đích học thuật, chức năng "người đàn ông nghèo" có thể trông giống như thế này:
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()
không phải là một chức năng javascript gốc. Nó là một chức năng tùy chỉnh ai đó thực hiện. Bạn sẽ phải tìm nó trên trang của bạn hoặc trong các tệp của bạn và đăng nó cho bất kỳ ai để giúp xác định những gì nó đang làm.
kiểm tra điều này: http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-quick-and-easy-javascript-testing-with-assert/
nó là để thử nghiệm JavaScript. Thật đáng ngạc nhiên, chỉ trong năm hoặc sáu dòng, mã này cung cấp một mức độ mạnh mẽ và khả năng kiểm soát mã của bạn khi kiểm tra.
Hàm khẳng định chấp nhận hai tham số:
kết quả: Một boolean, tham chiếu cho dù bài kiểm tra của bạn vượt qua hay thất bại
mô tả: Một mô tả ngắn về bài kiểm tra của bạn.
Sau đó, chức năng khẳng định chỉ đơn giản là tạo một mục danh sách, áp dụng một lớp của Pass pass hay hoặc không thành công, tùy thuộc vào việc kiểm tra của bạn trả về đúng hay sai, sau đó thêm mô tả vào mục danh sách. Cuối cùng, khối mã hóa đó được thêm vào trang. Thật điên rồ, nhưng hoạt động hoàn hảo.
Đây là một thực hiện đơn giản của một chức năng khẳng định. Nó có một giá trị và một mô tả về những gì bạn đang thử nghiệm.
function assert(value, description) {
var result = value ? "pass" : "fail";
console.log(result + ' - ' + description);
};
Nếu giá trị ước tính là đúng, nó sẽ vượt qua.
assert (1===1, 'testing if 1=1');
Nếu nó trả về sai thì thất bại.
assert (1===2, 'testing if 1=1');
Nếu xác nhận là sai, thông báo sẽ được hiển thị. Cụ thể, nếu đối số thứ nhất là sai, đối số thứ hai (thông báo chuỗi) sẽ được ghi vào bảng điều khiển công cụ dành cho nhà phát triển. Nếu đối số đầu tiên là đúng, về cơ bản không có gì xảy ra. Một ví dụ đơn giản - Tôi đang sử dụng Google Developer Tools:
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.');
Nó có thể đi kèm với một thư viện thử nghiệm mà một số mã của bạn đang sử dụng. Đây là một ví dụ về một (rất có thể đó không phải là thư viện giống như mã của bạn đang sử dụng, nhưng nó cho thấy ý tưởng chung):
Từ hoặc chức năng "khẳng định" chủ yếu được sử dụng trong các phần thử nghiệm của ứng dụng.
Các hàm khẳng định là một cách ngắn để hướng dẫn chương trình kiểm tra điều kiện (còn gọi là "khẳng định") và nếu điều kiện này không đúng, nó sẽ đưa ra lỗi.
Vì vậy, hãy xem nó trông như thế nào trong "mã bình thường"
if (typeof "string" === "array") {
throw Error('Error: "string" !== "array"');
}
Với assert
bạn chỉ có thể viết:
assert(typeof "string" === "array")
Trong Javascript, không có assert
chức năng gốc , vì vậy bạn phải sử dụng một chức năng từ một số thư viện.
Để giới thiệu đơn giản, bạn có thể kiểm tra bài viết này:
http://fredkschott.com/post/2014/05/nodejs-testing-essentials/
Tôi hy vọng nó sẽ giúp.
Xác nhận ném thông báo lỗi nếu thuộc tính đầu tiên là sai và thuộc tính thứ hai là thông báo được ném.
console.assert(condition,message);
Có nhiều ý kiến nói rằng khẳng định không tồn tại trong JavaScript nhưng console.assert()
là chức năng khẳng định trong JavaScript Ý tưởng của khẳng định là tìm lý do tại sao / nơi xảy ra lỗi.
console.assert(document.getElementById("title"), "You have no element with ID 'title'");
console.assert(document.getElementById("image"), "You have no element with ID 'image'");
Ở đây tùy thuộc vào thông báo bạn có thể tìm thấy lỗi là gì. Các thông báo lỗi này sẽ được hiển thị cho bảng điều khiển màu đỏ như thể chúng ta đã gọi console.error();
Để xem thêm các chức năng trong bảng điều khiển thực thiconsole.log(console);
Câu trả lời trước có thể được cải thiện về hiệu suất và khả năng tương thích.
Kiểm tra một lần nếu Error
đối tượng tồn tại, nếu không khai báo nó:
if (typeof Error === "undefined") {
Error = function(message) {
this.message = message;
};
Error.prototype.message = "";
}
Sau đó, mỗi xác nhận sẽ kiểm tra điều kiện và luôn ném một Error
đối tượng
function assert(condition, message) {
if (!condition) throw new Error(message || "Assertion failed");
}
Hãy nhớ rằng bàn điều khiển sẽ không hiển thị số dòng lỗi thực sự, nhưng dòng của assert
chức năng, không hữu ích để gỡ lỗi.
Nếu bạn sử dụng webpack, bạn chỉ có thể sử dụng thư viện khẳng định Node.js . Mặc dù họ cho rằng đó là "không có ý định là một thư viện xác nhận mục đích chung", nhưng dường như nó không ổn đối với các xác nhận ad hoc và dường như không có đối thủ nào tồn tại trong không gian Node (Chai được thiết kế để thử nghiệm đơn vị).
const assert = require('assert');
...
assert(jqXHR.status == 201, "create response should be 201");
Bạn cần sử dụng webpack hoặc browserify để có thể sử dụng cái này, vì vậy rõ ràng điều này chỉ hữu ích nếu chúng đã có trong quy trình làm việc của bạn.
Ngoài các tùy chọn khác như console.assert hoặc tự lăn , bạn có thể sử dụng bất biến . Nó có một vài tính năng độc đáo:
%s
specifier).Như TJ đã đề cập, không có assert
JavaScript. Tuy nhiên, có một mô-đun nút có tên là assert , được sử dụng chủ yếu để thử nghiệm . vì vậy, bạn có thể thấy mã như:
const assert = require('assert');
assert(5 > 7);
assert
.