Yanıtlar:
assert
JavaScript'te hiç yok (henüz; bir tane eklemekten bahsediliyor , ancak erken aşamada). Belki de kitaplık sağlayan bir kütüphane kullanıyorsunuzdur. Genel anlamı, işleve iletilen ifade yanlışsa bir hata atmaktır; bu, genel doğrulama kontrolü kavramının bir parçasıdır . Genellikle (isimlendirildikleri gibi) iddialar yalnızca "test" veya "hata ayıklama" derlemelerinde kullanılır ve üretim kodundan çıkarılır.
Her zaman bir dizeyi kabul etmesi gereken bir işleviniz olduğunu varsayalım . Birisinin bu işlevi dize olmayan bir şeyle çağırıp çağırmadığını bilmek istersiniz. Böylece şunları yapabilirsiniz:
assert(typeof argumentName === "string");
... assert
koşul yanlış olsaydı burada hata verirdi.
Çok basit bir sürüm şöyle görünecektir:
function assert(condition, message) {
if (!condition) {
throw message || "Assertion failed";
}
}
Daha da iyisi, Error
JavaScript motoru onu destekliyorsa (gerçekten eski olanlar olmayabilir), bu da bir yığın izlemesi toplama avantajına ve benzerlerine sahip olan nesneyi kullanın :
function assert(condition, message) {
if (!condition) {
message = message || "Assertion failed";
if (typeof Error !== "undefined") {
throw new Error(message);
}
throw message; // Fallback
}
}
IE8 bile Error
(özelliğe sahip olmasa da, stack
modern motorlar [modern IE dahil] var).
if(!condition)
ayarı var throwError=true;
sonra bir debugger;
atma bölümü sarın if(throwError)
. Bu şekilde, hata ayıklayıcı açıksa, kırılacak ve eğer arzu edersem throwError
yanlış olarak ayarlayabilir ve sonra dışarı çıkarken tüm kapsamları inceleyebilirim.
throw
. Bu şekilde debugger;
ifadeye ihtiyacınız yok . Daha fazla bilgi için developer.chrome.com/devtools/docs/… adresine bakın .
if
koşullu bir operatör için işlem gördünüz . Her neyse, bugünün dünyasında, sahip olmayan motorları desteklemeye zahmet etmem Error
.
Modern bir tarayıcı veya düğüm kullanıyorsanız, kullanabilirsiniz console.assert(expression, object)
.
Daha fazla bilgi için:
console.error
kod yürütülmeye devam ettiği gibi davranır .
console.assert
ile aynı davranışa sahip olmadığı sürece çok iyi değildir throw
.
console.assert
nedeni, iddiaların hata işleme işlevleri olmamasıdır. Yalnızca geliştirme sırasında kod doğruluğu kontrolü için tasarlanmıştır. Geleneksel olarak, canlı sistemlerin önemsiz bir şey nedeniyle sona ermesini önlemek için üretim ortamlarında tamamen devre dışı bırakılırlar. Tarayıcı bir üretim ortamı olarak kabul edilir, bu nedenle console.assert
burada yürütmeyi sonlandırmaz. Yürütmeyi durdurmak için iddialara güveniyorsanız, bunun yerine doğru iddiaları kullanmalısınız, çünkü iddiaların amacı bu değildir.
Diğer cevaplar iyidir: ECMAScript5'te yerleşik bir onaylama işlevi yoktur (örneğin temelde her yerde çalışan JavaScript), ancak bazı tarayıcılar size verir veya bu işlevselliği sağlayan eklentilere sahiptir. Bunun için iyi kurulmuş / popüler / bakımlı bir kütüphane kullanmak muhtemelen en iyisi olsa da, akademik amaçlar için "fakir bir adamın iddiası" işlevi şöyle görünebilir:
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
)
şuna göz at: http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-quick-and-easy-javascript-testing-with-assert/
JavaScript test etmek içindir. Şaşırtıcı bir şekilde, sadece beş veya altı satırda, bu kod test ederken kodunuz üzerinde büyük bir güç ve kontrol seviyesi sağlar.
Assert işlevi iki parametreyi kabul eder:
sonuç: Testinizin başarılı olup olmadığını gösteren bir boolean
açıklama: Testinizin kısa bir açıklaması.
Daha sonra assert işlevi basitçe bir liste öğesi oluşturur, testinizin true veya false olup olmadığına bağlı olarak bir “pass” veya “fail” sınıfı uygular ve ardından açıklamayı liste öğesine ekler. Son olarak, bu kod bloğu sayfaya eklenir. Çok basit, ama mükemmel çalışıyor.
İşte bir assert fonksiyonunun gerçekten basit bir uygulaması. Test ettiğiniz şeyin değeri ve açıklaması gerekir.
function assert(value, description) {
var result = value ? "pass" : "fail";
console.log(result + ' - ' + description);
};
Değer true olarak değerlendirilirse geçer.
assert (1===1, 'testing if 1=1');
False değerini döndürürse başarısız olur.
assert (1===2, 'testing if 1=1');
Onaylama yanlışsa, mesaj görüntülenir. Özellikle, ilk bağımsız değişken yanlışsa, ikinci bağımsız değişken (dize iletisi) geliştirici araçları konsoluna kaydedilir. İlk argüman doğruysa, temelde hiçbir şey olmaz. Basit bir örnek - Google Geliştirici Araçları kullanıyorum:
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.');
Muhtemelen bazı kodlarınızın kullandığı bir test kütüphanesi ile birlikte geldi. İşte bir örnek (olasılık, kodunuzun kullandığı kütüphane ile aynı değildir, ancak genel fikri gösterir):
Kelime veya işlev "assert" çoğunlukla uygulamanın parçalarının test edilmesinde kullanılır.
Onaylama işlevleri, programa koşulu ("onaylama" olarak da adlandırılır) kontrol etmesini bildirmenin kısa bir yoludur ve koşul Doğru değilse hata atar.
Şimdi "normal kod" da nasıl görüneceğini görelim
if (typeof "string" === "array") {
throw Error('Error: "string" !== "array"');
}
İle assert
yazabilirsiniz:
assert(typeof "string" === "array")
Javascript'te yerel dil yok assert
işlev , bu nedenle bazı kütüphanelerden birini kullanmanız gerekir.
Basit bir giriş için bu makaleyi kontrol edebilirsiniz:
http://fredkschott.com/post/2014/05/nodejs-testing-essentials/
Umut ediyorum bu yardım eder.
Birinci öznitelik yanlışsa, ikinci öznitelik atılacak mesaj ise onaylama hata iletisi atar.
console.assert(condition,message);
JavaScript'te iddianın mevcut olmadığını ancak JavaScript'te console.assert()
iddi fonksiyonunun olduğunu söyleyen birçok yorum var . İddia fikri, hatanın neden / nerede oluştuğunu bulmaktır.
console.assert(document.getElementById("title"), "You have no element with ID 'title'");
console.assert(document.getElementById("image"), "You have no element with ID 'image'");
Burada mesaja bağlı olarak hatanın ne olduğunu bulabilirsiniz. Bu hata mesajları, konsolda console.error();
daha fazla işlev görmek için çağırdığımız gibi kırmızı renkte konsolda görüntülenecektirconsole.log(console);
Önceki cevaplar performanslar ve uyumluluk açısından geliştirilebilir.
Kontrol kez eğer Error
beyan değilse, nesne var:
if (typeof Error === "undefined") {
Error = function(message) {
this.message = message;
};
Error.prototype.message = "";
}
Ardından, her iddia durumu kontrol eder ve her zaman bir Error
nesne atar
function assert(condition, message) {
if (!condition) throw new Error(message || "Assertion failed");
}
Konsolun gerçek hata satırı numarasını değil, ekranın satırını assert
değil, hata ayıklama için kullanışlı olmayan fonksiyon unutmayın.
Webpack kullanıyorsanız, sadece node.js onaylama kütüphanesini kullanabilirsiniz . Her ne kadar "genel amaçlı bir iddia kütüphanesi olması amaçlanmadığını" iddia etseler de, ad hoc iddiaları için OK'den daha fazlası gibi görünüyor ve Düğüm alanında zaten bir rakip yok gibi görünüyor (Chai birim testi için tasarlanmıştır).
const assert = require('assert');
...
assert(jqXHR.status == 201, "create response should be 201");
Bunu kullanabilmek için webpack veya browserify kullanmanız gerekir, bu yüzden bu sadece iş akışınızda zaten varsa yararlıdır.
Console.assert veya kendi yuvarlama gibi diğer seçeneklere ek olarak , değişmez kullanabilirsiniz . Birkaç benzersiz özelliği vardır:
%s
belirteç ).TJ tarafından belirtildiği gibi assert
, JavaScript yok . Ancak, bir düğüm modülü var assert olup, çoğunlukla test için kullanılmıştır . yani, kodu şöyle görebilirsiniz:
const assert = require('assert');
assert(5 > 7);
assert
.