Yanıtlar:
Farklılıklar orada belgelenir .
Üç arayüz, farklı iddialarda bulunma stilleri sunar. Sonuçta, aynı görevi yerine getirirler. Bazı kullanıcılar bir stili diğerine tercih eder. Bununla birlikte, vurgulamaya değer birkaç teknik husus vardır:
Onaylama ve bekletme arayüzleri Object.prototype
değişmez, oysa değişmelidir. Bu nedenle, değiştiremeyeceğiniz veya değiştirmek istemediğiniz bir ortamda daha iyi bir seçimdir Object.prototype
.
Onaylama ve bekletme arayüzleri hemen hemen her yerde özel mesajları destekler. Örneğin:
assert.isTrue(foo, "foo should be true");
expect(foo, "foo should be true").to.be.true;
Onaylama başarısız olursa "foo doğru olmalı" mesajı başarısız onaylama ile birlikte verilir. Must arabirimiyle özel bir ileti ayarlama fırsatı elde edemezsiniz.
(Tarihsel not: Bu cevap uzun zamandır özel bir mesaj almak expect
için bir geçici çözüm kullanmanız gerektiğini belirtti. Aurélien Ribon bana expect
ikinci bir parametre olarak bir mesaj iletmenin işe yaradığını söyledi. Bu mesaj için hangi Mocha sürümünün destek sağlamaya başladığını bulamadım veya belgelerin hangi sürümünün ilk kez belgelendiğini bulamadım.)
Not assert.isTrue(foo)
, expect(foo).to.be.true
ve foo.should.be.true
özel bir mesaj kullanmak istemiyorsanız tüm çıkış takip ve foo === 1
:
AssertionError: expected 1 to be true
Bu nedenle, bekle ve ara arabirimi okumak daha güzel olsa da, bir iddia başarısız olduğunda bir arabirimin diğerinden daha doğal olarak bilgilendirici olması gibi değildir. Her üç arayüz için de aynı olan bu mesaj size tam olarak neyi test ettiğinizi söylemez , sadece elde ettiğiniz değerin ne olduğunu 1
istersiniz true
. Neyi test ettiğinizi bilmek istiyorsanız, bir mesaj eklemeniz gerekir.
expect
mocha
ve bir test hatası aldığında hiçbir yerde görünmez .
Umarım bu basit örnekler farklılıklarını netleştirir
belirt
var assert = require('chai').assert
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
assert.typeOf(foo, 'string'); // without optional message
assert.typeOf(foo, 'string', 'foo is a string'); // with optional message
assert.equal(foo, 'bar', 'foo equal `bar`');
assert.lengthOf(foo, 3, 'foo`s value has a length of 3');
assert.lengthOf(beverages.tea, 3, 'beverages has 3 types of tea');
Her durumda, assert stili, assert deyimindeki son parametre olarak isteğe bağlı bir mesaj eklemenizi sağlar. İddianız geçmediği takdirde bunlar hata mesajlarına dahil edilecektir.
Not bekliyoruz ve yapı iddialarının gerektiği kullanımlar chainable dil, ancak bir iddia başlangıçta inşa edilmiş şekilde farklıdır. Gerekirse, uyarıların üstesinden gelmek için bazı uyarılar ve ek araçlar da vardır.
beklemek
var expect = require('chai').expect
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);
expect(beverages).to.have.property('tea').with.lengthOf(3);
Expect, oluşabilecek başarısız iddiaların önüne geçmek için rastgele mesajlar eklemenizi sağlar.
var answer = 43;
// AssertionError: expected 43 to equal 42.
expect(answer).to.equal(42);
// AssertionError: topic [answer]: expected 43 to equal 42.
expect(answer, 'topic [answer]').to.equal(42);
Bu, booleans veya sayılar gibi açıklayıcı olmayan konularla kullanıldığında kullanışlıdır.
Meli
Must stili, bekleme arabirimi ile aynı zincirlenebilir iddialara izin verir, ancak her nesneyi zincirinizi başlatmak için bir should özelliğiyle genişletir. Bu stilin Internet Explorer ile kullanıldığında bazı sorunları vardır, bu nedenle tarayıcı uyumluluğuna dikkat edin.
var should = require('chai').should() //actually call the function
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);
beverages.should.have.property('tea').with.lengthOf(3);
Beklenti ve zorunluluk arasındaki farklar
Her şeyden önce, bekletme gereksiniminin bekletme işlevine bir başvuru olduğuna dikkat edin, oysa gereksinim duyulduğunda işlev yürütülüyor.
var chai = require('chai')
, expect = chai.expect
, should = chai.should();
Bekliyoruz arayüz dil iddialarını zincirleme için bir başlangıç noktası olarak bir işlev sağlar. Node.js ve tüm tarayıcılarda çalışır.
Gerektiğini arabirimi Dil iddialar için başlangıç noktası olarak tek getter sağlamak için Object.prototype uzanır. Node.js üzerinde ve Internet Explorer dışındaki tüm modern tarayıcılarda çalışır.
expect(foo).to.equal(true, "foo should be true");