Risposte:
Non c'è assert
JavaScript (ancora; si parla di aggiungerne uno , ma è in una fase iniziale). Forse stai usando una libreria che ne fornisce una. Il solito significato è generare un errore se l'espressione passata nella funzione è falsa; questo fa parte del concetto generale di controllo delle asserzioni . Solitamente le asserzioni (come vengono chiamate) vengono utilizzate solo nelle build "testing" o "debug" e rimosse dal codice di produzione.
Supponiamo che tu abbia una funzione che dovrebbe sempre accettare una stringa. Vorresti sapere se qualcuno ha chiamato quella funzione con qualcosa che non era una stringa. Quindi potresti fare:
assert(typeof argumentName === "string");
... dove assert
verrebbe generato un errore se la condizione fosse falsa.
Una versione molto semplice sarebbe simile a questa:
function assert(condition, message) {
if (!condition) {
throw message || "Assertion failed";
}
}
Meglio ancora, usa l' Error
oggetto se il motore JavaScript lo supporta (quelli davvero vecchi potrebbero non farlo), il che ha il vantaggio di raccogliere una traccia dello stack e simili:
function assert(condition, message) {
if (!condition) {
message = message || "Assertion failed";
if (typeof Error !== "undefined") {
throw new Error(message);
}
throw message; // Fallback
}
}
Anche IE8 ha Error
(anche se non ha la stack
proprietà, ma i motori moderni [incluso IE moderno] lo fanno).
if(!condition)
è l'impostazione var throwError=true;
quindi debugger;
poi avvolgere la sezione tiro in una if(throwError)
. In questo modo, se ho il debugger aperto, si romperà e, se lo desidero, posso impostare throwError
su false e quindi esaminare tutti gli ambiti mentre esco.
throw
. In questo modo non hai bisogno debugger;
dell'affermazione. Vedi developer.chrome.com/devtools/docs/… per ulteriori informazioni.
if
con un operatore condizionale. Ad ogni modo, nel mondo di oggi, non mi preoccuperei di supportare motori che non hanno Error
.
Se si utilizza un browser moderno o nodejs, è possibile utilizzare console.assert(expression, object)
.
Per maggiori informazioni:
console.error
nel fatto che il codice continua a essere eseguito.
console.assert
non è così buono a meno che non abbia lo stesso comportamento di throw
.
console.assert
è perché le asserzioni non sono funzioni di gestione degli errori. Sono progettati per il controllo della correttezza del codice solo durante lo sviluppo. Tradizionalmente sono completamente disabilitati negli ambienti di produzione per evitare che i sistemi live terminino a causa di qualcosa di banale. Il browser è considerato un ambiente di produzione, quindi console.assert
non termina l'esecuzione lì. Se si fa affidamento sulle asserzioni per interrompere l'esecuzione, è necessario utilizzare invece la corretta gestione degli errori, poiché non è questo il significato delle asserzioni.
Le altre risposte sono buone: non esiste una funzione di asserzione integrata in ECMAScript5 (ad es. JavaScript che funziona praticamente ovunque) ma alcuni browser te lo danno o hanno componenti aggiuntivi che forniscono tale funzionalità. Mentre è probabilmente meglio usare una libreria ben consolidata / popolare / mantenuta per questo, per scopi accademici una funzione di "affermazione di un uomo povero" potrebbe assomigliare a questa:
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()
non è una funzione javascript nativa. È una funzione personalizzata creata da qualcuno. Dovrai cercarlo sulla tua pagina o nei tuoi file e pubblicarlo per chiunque possa aiutare a determinare cosa sta facendo.
controlla questo: http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-quick-and-easy-javascript-testing-with-assert/
è per testare JavaScript. Sorprendentemente, a sole cinque o sei righe, questo codice fornisce un grande livello di potenza e controllo sul codice, durante i test.
La funzione assert accetta due parametri:
risultato: un valore booleano che indica se il test è stato superato o meno
descrizione: una breve descrizione del test.
La funzione assert quindi crea semplicemente un elemento dell'elenco, applica una classe di "pass" o "fail", a seconda che il test abbia restituito vero o falso, quindi aggiunge la descrizione all'elemento dell'elenco. Infine, quel blocco di codice è aggiunto alla pagina. È follemente semplice, ma funziona perfettamente.
Ecco un'implementazione davvero semplice di una funzione assert. Prende un valore e una descrizione di ciò che stai testando.
function assert(value, description) {
var result = value ? "pass" : "fail";
console.log(result + ' - ' + description);
};
Se il valore restituisce true, passa.
assert (1===1, 'testing if 1=1');
Se restituisce false, fallisce.
assert (1===2, 'testing if 1=1');
Se l'asserzione è falsa, viene visualizzato il messaggio. In particolare, se il primo argomento è falso, il secondo argomento (il messaggio stringa) verrà registrato nella console degli strumenti di sviluppo. Se il primo argomento è vero, praticamente non accade nulla. Un semplice esempio: sto utilizzando Strumenti per gli sviluppatori di 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.');
Probabilmente è arrivato con una libreria di test che parte del tuo codice sta usando. Ecco un esempio di uno (è probabile che non sia la stessa libreria utilizzata dal codice, ma mostra l'idea generale):
La parola o la funzione "assert" è utilizzata principalmente per testare parti dell'applicazione.
Le funzioni di asserzione sono un modo breve per istruire il programma a controllare la condizione (anche chiamata "asserzione") e se la condizione non è vera, genererà un errore.
Quindi vediamo come sarebbe nel "codice normale"
if (typeof "string" === "array") {
throw Error('Error: "string" !== "array"');
}
Con assert
te puoi semplicemente scrivere:
assert(typeof "string" === "array")
In Javascript, non esiste una assert
funzione nativa , quindi devi usarne una da alcune librerie.
Per una semplice introduzione, puoi consultare questo articolo:
http://fredkschott.com/post/2014/05/nodejs-testing-essentials/
Spero possa essere d'aiuto.
L'asserzione genera un messaggio di errore se il primo attributo è falso e il secondo attributo è il messaggio da lanciare.
console.assert(condition,message);
Ci sono molti commenti che affermano che l'asserzione non esiste in JavaScript ma console.assert()
è la funzione di asserzione in JavaScript L'idea di asserzione è di scoprire perché / dove si verifica il bug.
console.assert(document.getElementById("title"), "You have no element with ID 'title'");
console.assert(document.getElementById("image"), "You have no element with ID 'image'");
Qui a seconda del messaggio puoi trovare qual è il bug. Questi messaggi di errore verranno visualizzati sulla console in colore rosso come se avessimo chiamato console.error();
Per vedere l'esecuzione di più funzioni nella consoleconsole.log(console);
Le risposte precedenti possono essere migliorate in termini di prestazioni e compatibilità.
Controlla una volta se l' Error
oggetto esiste, in caso contrario dichiaralo:
if (typeof Error === "undefined") {
Error = function(message) {
this.message = message;
};
Error.prototype.message = "";
}
Quindi, ogni asserzione verificherà la condizione e lancerà sempre un Error
oggetto
function assert(condition, message) {
if (!condition) throw new Error(message || "Assertion failed");
}
Tieni presente che la console non visualizzerà il numero della riga di errore reale, ma la riga della assert
funzione, che non è utile per il debug.
Se si utilizza webpack, si può semplicemente utilizzare la libreria asserzione node.js . Sebbene affermino che "non è destinato a essere una libreria di asserzioni per scopi generici", sembra essere più che OK per asserzioni ad hoc, e sembra comunque che non vi siano concorrenti nello spazio Node (Chai è progettato per i test unitari).
const assert = require('assert');
...
assert(jqXHR.status == 201, "create response should be 201");
Devi usare webpack o browserify per poterlo usare, quindi ovviamente questo è utile solo se quelli sono già nel tuo flusso di lavoro.
Oltre ad altre opzioni come console.assert o il tuo roll , puoi usare invariant . Ha un paio di caratteristiche uniche:
%s
identificatore).Come menzionato da TJ, non esiste assert
JavaScript. Tuttavia, esiste un modulo nodo chiamato assert , che viene utilizzato principalmente per i test . quindi, potresti vedere un codice come:
const assert = require('assert');
assert(5 > 7);
assert
.