写在前面:

  Jest中定义了很多全局性的Function供我们使用,我们不必再去引用别的包来去实现类似的功能,下面将列举Jest中实现的全局函数。

Jest Global Functions

afterAll(fn, timeout)

从字面意思就可以理解到它是在所有测试运行完之后才会执行的,如果你的测试中包含promise,则将会等待promise被验证之后被执行。

你还可以提供一个timeout的参数(以毫秒为单位),用于指定在终止前等待的时间。注意:默认的超时是5秒。

如果您想要清理一些跨测试共享的全局设置状态,这通常是有用的。

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)

在该文件中的每一个测试完成后运行一个函数。如果函数返回一个promise,Jest会等待该promise在继续之前解决。

你还可以提供一个超时(以毫秒为单位),用于指定在终止前等待的时间。注意:默认的超时是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(测试异步代码)

   3.前端测试框架Jest系列教程 -- Mock Functions(模拟器)

   4.前端测试框架Jest系列教程 -- Global Functions(全局函数)

前端测试框架Jest系列教程 -- Global Functions(全局函数)的更多相关文章

  1. 前端测试框架Jest系列教程 -- Mock Functions

    写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...

  2. 前端测试框架Jest系列教程 -- Mock Functions(模拟器)

    写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...

  3. 前端测试框架Jest系列教程 -- 简介

    写在前面: 随着互联网日新月异的发展,用户对于页面的美观度,流畅度以及各方面的体验有了更高的要求,我们的网页不再是简单的承载文字,图片等简单的信息传递给用户,我们需要的是更加美观的页面展示,更快的浏览 ...

  4. 前端测试框架Jest系列教程 -- Asynchronous(测试异步代码)

    写在前面: 在JavaScript代码中,异步运行是很常见的.当你有异步运行的代码时,Jest需要知道它测试的代码何时完成,然后才能继续进行另一个测试.Jest提供了几种方法来处理这个问题. 测试异步 ...

  5. 前端测试框架Jest系列教程 -- Matchers(匹配器)

    写在前面: 匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试的返回值,本文重点介绍几种常用的Matcher,其他的可以通过官网api文档查看. 常用的 ...

  6. 前端测试框架Jest系列教程 -- Expect(验证)

    写在前面 在编写测试时,我们通常需要检查值是否满足某些条件,Jest中提供的expect允许你访问很多“Matchers”,这些“匹配器”允许您验证不同的东西. Expect 可以验证什么 Jest中 ...

  7. 前端测试框架jest 简介

    转自: https://www.cnblogs.com/Wolfmanlq/p/8012847.html 作者:Ken Wang 出处:http://www.cnblogs.com/Wolfmanlq ...

  8. 前端测试框架 Jest

    前端测试工具一览 前端测试工具也和前端的框架一样纷繁复杂,其中常见的测试工具,大致可分为测试框架.断言库.测试覆盖率工具等几类.在正式开始本文之前,我们先来大致了解下它们: 测试框架 测试框架的作用是 ...

  9. 前端测试框架Jest——语法篇

    使用匹配器 使用不同匹配器可以测试输入输出的值是否符合预期.下面介绍一些常见的匹配器.普通匹配器最简单的测试值的方法就是看是否精确匹配.首先是toBe() test('two plus two is ...

随机推荐

  1. SQL注入技术

    TalkTalk的信息泄漏事件导致约15万人的敏感信息被暴露,涉嫌造成这一事件的其中一名黑客使用的并不是很新的技术.事实上,该技术的「年纪」比这名15岁黑客还要大两岁. [译注:TalkTalk是英国 ...

  2. 关联查询一张小表。对性能有影响吗(mysql)

     具体语句  SELECT dfm.id, dfm.member_code, dfm.member_name, dfm.recommend_code, dfm.member_rank, dfm.cre ...

  3. KiKi's K-Number

    KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  4. Strange fuction

    Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  5. jquery操作html小技巧

    1.隐藏table整列 $("#tableID tr").find('td:eq(N)').hide();

  6. 《项目架构那点儿事》——Hibernate泛型Dao,让持久层简洁起来

    [前言]hibernate作为持久层ORM技术,它对JDBC进行非常轻量级对象封装,使得我们可以随心所欲的使用面向对象的思想来操作数据 库.同时,作为后台开发的支撑,的确扮演了一个举足轻重的角色,那么 ...

  7. 六:Ioc和AOP使用拓展

    Ioc和AOP使用拓展 一:1.构造注入 一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序,index指定元素,位置从0开始,Type用来指定参数,避免 ...

  8. 设计模式的征途—10.装饰(Decorator)模式

    虽然目前房价依旧很高,就连我所在的成都郊区(非中心城区)的房价均价都早已破万,但却还是阻挡不了大家对新房的渴望和买房的热情.如果大家买的是清水房,那么无疑还有一项艰巨的任务在等着大家,那就是装修.对新 ...

  9. linux操作系统基础篇(六)

    linux服务篇 1.samba服务的搭建 samba的功能: samba是一个网络服务器,用于Linux和Windows之间共享文件.2. samba服务的启动.停止.重启service smb s ...

  10. [转]Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...