Jest中定義了不少全局性的Function供咱們使用,咱們沒必要再去引用別的包來去實現相似的功能,下面將列舉Jest中實現的全局函數。html
afterAll(fn, timeout)
前端
從字面意思就能夠理解到它是在全部測試運行完以後纔會執行的,若是你的測試中包含promise,則將會等待promise被驗證以後被執行。數據庫
你還能夠提供一個timeout的參數(以毫秒爲單位),用於指定在終止前等待的時間。注意:默認的超時是5秒。promise
若是您想要清理一些跨測試共享的全局設置狀態,這一般是有用的。框架
const globalDatabase = makeGlobalDatabase(); function cleanUpDatabase(db) { db.cleanUp(); } afterAll(() => { cleanUpDatabase(globalDatabase); }); test('can find things', () => { return globalDatabase.find('thing', {}, results => { expect(results.length).toBeGreaterThan(0); }); }); test('can insert a thing', () => { return globalDatabase.insert('thing', makeThing(), response => { expect(response.success).toBeTruthy(); }); });
在這裏,afterAll確保在全部測試運行後調用cleanUpDatabase。異步
若是在描述塊內部,它在描述塊的末尾運行。函數
若是你想在每次測試以後運行一些清理,而不是在全部測試以後,使用afterEach代替。測試
afterEach(fn, timeout)
fetch
在該文件中的每個測試完成後運行一個函數。若是函數返回一個promise,Jest會等待該promise在繼續以前解決。ui
你還能夠提供一個超時(以毫秒爲單位),用於指定在終止前等待的時間。注意:默認的超時是5秒。
若是您想清除每一個測試建立的臨時狀態,這一般是有用的。
const globalDatabase = makeGlobalDatabase(); function cleanUpDatabase(db) { db.cleanUp(); } afterEach(() => { cleanUpDatabase(globalDatabase); }); test('can find things', () => { return globalDatabase.find('thing', {}, results => { expect(results.length).toBeGreaterThan(0); }); }); test('can insert a thing', () => { return globalDatabase.insert('thing', makeThing(), response => { expect(response.success).toBeTruthy(); }); });
在這裏,afterEach確保在每次測試運行後調用cleanUpDatabase。
若是每一個都在一個描述塊內,它只在這個描述塊內的測試以後運行。
若是你只想在運行完全部測試以後運行一些清理工做,那麼使用afterAll代替。
beforeAll(fn, timeout)
在該文件運行的任何測試以前運行一個函數。若是函數返回一個承諾,則Jest會等待在運行測試以前解決這個問題。
你還能夠提供一個超時(以毫秒爲單位),用於指定在終止前等待的時間。注意:默認的超時是5秒。
若是你想設置一些將被許多測試使用的全局狀態,這一般是有用的。
const globalDatabase = makeGlobalDatabase(); beforeAll(() => { // Clears the database and adds some testing data. // Jest will wait for this promise to resolve before running tests. return globalDatabase.clear().then(() => { return globalDatabase.insert({testData: 'foo'}); }); }); // Since we only set up the database once in this example, it's important // that our tests don't modify it. test('can find things', () => { return globalDatabase.find('thing', {}, results => { expect(results.length).toBeGreaterThan(0); }); });
在這裏,beforeAll確保在測試運行以前創建數據庫。
若是設置是同步的,那麼你能夠在沒有之前的狀況下這樣作。關鍵是Jest將等待一個promise來解決,所以你也能夠擁有異步設置。
若是beforeAll在一個描述塊中,它在描述塊的開始處運行。 若是你想在每次測試以前運行一些東西,而不是在任何測試以前運行,那麼請在每一個測試以前使用。
beforeEach(fn, timeout)
在該文件運行的每一個測試以前運行一個函數。若是函數返回一個promise,Jest將等待該承諾在運行測試以前解決。
你還能夠提供一個超時(以毫秒爲單位),用於指定在終止前等待的時間。注意:默認的超時是5秒。
若是你想要重置一些將被許多測試所使用的全局狀態,這一般是有用的。
const globalDatabase = makeGlobalDatabase(); beforeEach(() => { // Clears the database and adds some testing data. // Jest will wait for this promise to resolve before running tests. return globalDatabase.clear().then(() => { return globalDatabase.insert({testData: 'foo'}); }); }); test('can find things', () => { return globalDatabase.find('thing', {}, results => { expect(results.length).toBeGreaterThan(0); }); }); test('can insert a thing', () => { return globalDatabase.insert('thing', makeThing(), response => { expect(response.success).toBeTruthy(); }); });
在此以前,每一個測試都要重置數據庫。
若是在一個描述塊內部,它運行在描述塊中的每一個測試。
若是你只須要運行一些設置代碼,在任何測試運行以前,就使用以前的全部代碼。
describe(name, fn)
describe(name, fn)建立一個塊,在一個「測試套件」中,將幾個相關的測試組合在一塊兒。
const myBeverage = { delicious: true, sour: false, }; describe('my beverage', () => { test('is delicious', () => { expect(myBeverage.delicious).toBeTruthy(); }); test('is not sour', () => { expect(myBeverage.sour).toBeFalsy(); }); });
這不是必需的——你能夠直接在頂層編寫測試塊。可是,若是您但願將測試組織成組,那麼這就很方便了。
const binaryStringToNumber = binString => { if (!/^[01]+$/.test(binString)) { throw new CustomError('Not a binary number.'); } return parseInt(binString, 2); }; describe('binaryStringToNumber', () => { describe('given an invalid binary string', () => { test('composed of non-numbers throws CustomError', () => { expect(() => binaryStringToNumber('abc')).toThrowError(CustomError); }); test('with extra whitespace throws CustomError', () => { expect(() => binaryStringToNumber(' 100')).toThrowError(CustomError); }); }); describe('given a valid binary string', () => { test('returns the correct number', () => { expect(binaryStringToNumber('100')).toBe(4); }); }); });
describe.only(name, fn)
若是你只想運行一次模塊測試的話你可使用 only
describe.only('my beverage', () => { test('is delicious', () => { expect(myBeverage.delicious).toBeTruthy(); }); test('is not sour', () => { expect(myBeverage.sour).toBeFalsy(); }); }); describe('my other beverage', () => { // ... will be skipped });
describe.skip(name, fn) describe 等價於 xdescribe
你可使用skip 跳過某一個測試
describe('my beverage', () => { test('is delicious', () => { expect(myBeverage.delicious).toBeTruthy(); }); test('is not sour', () => { expect(myBeverage.sour).toBeFalsy(); }); }); describe.skip('my other beverage', () => { // ... will be skipped });
使用跳過一般只是一種比較簡單的替代方法,若是不想運行則能夠暫時將大量的測試註釋掉。
require.requireActual(moduleName)
返回實際的模塊而不是模擬,繞過全部檢查模塊是否應該接收模擬實現。
require.requireMock(moduleName)
返回一個模擬模塊,而不是實際的模塊,繞過全部檢查模塊是否正常。
test(name, fn, timeout) 等價於 it(name, fn, timeout)
在測試文件中,您所須要的是運行測試的測試方法。例如,假設有一個函數inchesOfRain()應該是零。你的整個測試能夠是:
test('did not rain', () => { expect(inchesOfRain()).toBe(0); });
第一個參數是測試名稱;第二個參數是包含測試指望的函數。第三個參數(可選)是超時(以毫秒爲單位),用於指定在停止前等待多長時間。注意:默認的超時是5秒。
注意:若是測試返回了一個promise,Jest會在測試完成以前等待promise。Jest還將等待,若是你爲測試函數提供一個參數,一般稱爲done。當你想要測試回調時,這將很是方便。請參見如何在此測試異步代碼。
例如,假設fetchBeverageList()返回一個承諾,該承諾將解析到其中有lemon的列表。你能夠用:
test('has lemon in it', () => { return fetchBeverageList().then(list => { expect(list).toContain('lemon'); }); });
即便對測試的調用會當即返回,測試也不會完成,直到promise解決。
test.only(name, fn, timeout)等同於
it.only(name, fn, timeout)
or fit(name, fn, timeout)
在調試大型代碼庫時,一般只但願運行一個子集的測試。您可使用。只指定哪些測試是您想要運行的。
您還能夠提供一個超時(以毫秒爲單位),用於指定在終止前等待的時間。注意:默認的超時是5秒。
test.only('it is raining', () => { expect(inchesOfRain()).toBeGreaterThan(0); }); test('it is not snowing', () => { expect(inchesOfSnow()).toBe(0); });
只有「it is raining」測試纔會運行,由於它是用test運行的。
一般你不會使用測試來檢查代碼。只有在源代碼控制中——您將僅用於調試,並在修復了故障測試後刪除它。
test.skip(name, fn)等同於
it.skip(name, fn)
or xit(name, fn)
or xtest(name, fn)
當您維護一個大型的代碼庫時,您可能有時會發現因爲某種緣由而臨時中斷的測試。
若是您想跳過這個測試,可是您不想僅僅刪除這個代碼,您可使用skip指定一些測試來跳過。
test('it is raining', () => { expect(inchesOfRain()).toBeGreaterThan(0); }); test.skip('it is not snowing', () => { expect(inchesOfSnow()).toBe(0); });
只有「it is raining」測試運行,由於另外一個測試運行test . skip。 您能夠簡單地對測試進行註釋,可是使用skip會更好一些,由於它將保持縮進和語法突出。
本文介紹了一些Jest中的全局函數,能夠在任意地方方便的使用。
1. 前端測試框架Jest系列教程 -- Matchers(匹配器)
2.前端測試框架Jest系列教程 -- Asynchronous(測試異步代碼)