W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
單元測(cè)試一般被用來(lái)測(cè)試一些小的代碼塊,并確保它正在做的是什么。與驗(yàn)收測(cè)試不同的是,單元測(cè)試被限定在小范圍內(nèi)并且不需要Emeber程序運(yùn)行。
與Ember基本對(duì)象一樣的,創(chuàng)建單元測(cè)試也只需要繼承Ember.Object
即可。然后在代碼塊內(nèi)編寫(xiě)具體的測(cè)試內(nèi)容,比如控制器、組件。每個(gè)測(cè)試就是一個(gè)Ember.Object
實(shí)例對(duì)象,你可以設(shè)置對(duì)象的狀態(tài),運(yùn)行斷言。通過(guò)下面的例子,讓我們一起看看測(cè)試如何使用。
創(chuàng)建一個(gè)簡(jiǎn)單的實(shí)例,實(shí)例內(nèi)包含一個(gè)計(jì)算屬性computedFoo
,此計(jì)算屬性依賴普通屬性foot
。
//app/models/somt-thing.js
export default Ember.Object.extend({
foo: 'bar',
computedFoo: Ember.compuuted('foo',function() {
const foo = this.get('foo');
return `computed ${foo}`;
})
});
在測(cè)試中,我們建立一個(gè)實(shí)例,然后更新屬性foo
的值(這個(gè)操作會(huì)觸發(fā)計(jì)算屬性computedFoo
,使其自動(dòng)更新),然后給出一個(gè)符合預(yù)期的斷言
:
//tests/unit/models/some-thing-test.js
import {moduleFor, test} from 'ember-qunit';
moduleFor('model:some-thing', 'Unit | some thing', {
unit: true
});
test('should correctly concat foo', function(assert) {
const someThing = this.subject();
somtThing.set('foo', 'baz'); //設(shè)置屬性foo的值
assert.equal(someThing.get('computedFoo'), 'computed baz'); //斷言,判斷計(jì)算屬性值是否相等于computed baz
});
例子中使用了moduleFor
,它是由Ember-Qunit
提供的單元測(cè)試助手。這些測(cè)試助手為我們提供了很多便利,比如subject
功能,它可以尋找并實(shí)例化測(cè)試所用的對(duì)象。同時(shí)你還可以在subject
方法中自定義初始化的內(nèi)容,這些初始化的內(nèi)容可以是傳遞給主體功能的實(shí)例變量。比如在單元測(cè)試內(nèi)初始化屬性“foo”你可以這樣做:this.subject({foo: 'bar'});
,那么單元測(cè)試在運(yùn)行時(shí)屬性foo
的值就是bar
。
下面讓我們來(lái)看一下如何測(cè)試對(duì)象方法的邏輯。在本例中對(duì)象內(nèi)部有一個(gè)設(shè)置屬性(更新屬性foo
值)值的方法testMethod
。
//app/models/some-thing.js
export default Ember.Object.extend({
foo: 'bar',
testMethod() {
this.set('foo', 'baz');
}
});
要對(duì)其進(jìn)行測(cè)試,我們先創(chuàng)建如下實(shí)例,然后調(diào)用testMethod
方法,然后用斷言判斷方法的調(diào)用結(jié)果是否是正確的。
//tests/unit/models/some-thing-test.js
test('should update foo on testMethod', function(assert) {
const someThing = this.subject();
someThing.testMethod();
assert.equal(someThing.get('foo'), 'baz');
});
如果一個(gè)對(duì)象方法返回的是一個(gè)值,你可以很容易的給予斷言進(jìn)行判定是否正確。假設(shè)我們的對(duì)象擁有一個(gè)calc
方法,方法的返回值是基于對(duì)象內(nèi)部的狀態(tài)值。代碼如下:
//app/models/some-thing.js
export default Ember.Object.extend({
count: 0,
calc() {
this.incrementProperty('count');
let count = this.get('count');
return `count: ${count}`;
}
});
在測(cè)試中需要調(diào)用calc
方法,并且斷言其返回值是否正確。
//tests/unit/models/some-thing-test.js
test('should return incremented count on calc', function(assert) {
const someThing = this.subject();
assert.equal(someThing.calc(), 'count: 1');
assert.equal(someThing.calc(), 'count: 2');
});
假設(shè)我們有一個(gè)對(duì)象,這個(gè)對(duì)象擁有一些屬性,并且有一個(gè)方法在監(jiān)測(cè)著這些屬性。
//app/models/some-thing.js
export default Ember.Object.extend({
foo: 'bar'
other: 'no',,
doSomething: Ember.observer('foo', function() {
this.set('other', 'yes');
})
});
為了測(cè)試doSomething
方法,我們創(chuàng)建一個(gè)SomeThing
對(duì)象,更新foo
屬性值,然后進(jìn)行斷言是否達(dá)到預(yù)期結(jié)果。
//tests/unit/models/some-thing-test.js
test('should set other prop to yes when foo changes', function(assert) {
const someThing = this.subject();
someThing.set('foo', 'baz');
assert.equal(someThing.get('other'), 'yes');
});
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: