Глобальные значения
В скриптах тестирования, Jest создает эти функции и объекты в глобальной области видимости. Вам не нужно ничего импортировать или подключать к скрипту для работы с этими функциями и объектами. Однако, если вы предпочитаете импорт, вы можете импортировать {describe, expect, test} из '@jest/globals'
.
Примеры TypeScript с этой страницы будут работать только в том случае, если вы явно импортируете Jest API:
Import {expect, jest, test} from '@jest/globals';
Обратитесь к Началу работы за подробностями о том, как установить Jest с TypeScript.
Методы
- Справка
afterAll(fn, timeout)
afterEach(fn, timeout)
beforeAll(fn, timeout)
beforeEach(fn, timeout)
describe(name, fn)
describe.each(table)(name, fn, timeout)
describe.only(name, fn)
describe.only.each(table)(name, fn)
describe.skip(name, fn)
describe.skip.each(table)(name, fn)
test(name, fn, timeout)
test.concurrent(name, fn, timeout)
test.concurrent.each(table)(name, fn, timeout)
test.concurrent.only.each(table)(name, fn)
test.concurrent.skip.each(table)(name, fn)
test.each(table)(name, fn, timeout)
test.failing(name, fn, timeout)
test.failing.each(name, fn, timeout)
test.only.failing(name, fn, timeout)
test.skip.failing(name, fn, timeout)
test.only(name, fn, timeout)
test.only.each(table)(name, fn)
test.skip(name, fn)
test.skip.each(table)(name, fn)
test.todo(name)
- TypeScript Usage
Справка
afterAll(fn, timeout)
Выполняет функцию после всех тестов в этом файле. Если функция возвращает промис или является генератором, Jest ждет пока промис разрешится, а затем запускает тесты.
Optionally, you can provide a timeout
(in milliseconds) for specifying how long to wait for each row before aborting. The default timeout is 5 seconds.
Например:
Например:
const globalDatabase = makeGlobalDatabase();
function cleanUpDatabase(db) {
db.cleanUp();
}
afterAll(() => {
cleanUpDatabase(globalDatabase);
});
test('может найти запись', () => {
return globalDatabase.find('запись', {}, results => {
expect(results.length).toBeGreaterThan(0);
});
});
test('может добавить запись', () => {
return globalDatabase.insert('запись', makeThing(), response => {
expect(response.success).toBeTruthy();
});
});
Если afterAll
находится внутри блока describe
, то он запускается в конце блока describe.
Если вы хотите производить очистку после каждого теста, а не после всех тестов, то вместо этого используйте afterEach
.
Это может быть полезно, если вы хотите очистить некоторое временное состояние создаваемое каждым тестом.
afterEach(fn, timeout)
Выполняет функцию после каждого теста в файле. Если функция возвращает промис или является генератором, Jest ждет пока промис разрешится, а затем запускает тесты.
Optionally, you can provide a timeout
(in milliseconds) for specifying how long to wait for each row before aborting. The default timeout is 5 seconds.
Например:
Например:
const globalDatabase = makeGlobalDatabase();
function cleanUpDatabase(db) {
db.cleanUp();
}
afterEach(() => {
cleanUpDatabase(globalDatabase);
});
test('може найти запись', () => {
return globalDatabase.find('запись', {}, results => {
expect(results.length).toBeGreaterThan(0);
});
});
test('может добавить запись', () => {
return globalDatabase.insert('запись', makeThing(), response => {
expect(response.success).toBeTruthy();
});
});
Если afterEach
находится внутри блока describe
, то он запускается только после каждого теста внутри блока describe.
Если вы хотите провести очистку только один раз, после всех тестов, используйте afterAll
.
Если вы хотите провести очистку только один раз, после всех тестов, используйте afterAll
.
beforeAll(fn, timeout)
Выполняет функцию перед запуском каждого теста в этом файле. Если функция возвращает промис или является генератором, Jest ждет пока промис разрешится, а затем запускает тест.
Optionally, you can provide a timeout
(in milliseconds) for specifying how long to wait for each row before aborting. The default timeout is 5 seconds.
Например:
Например:
const globalDatabase = makeGlobalDatabase();
beforeEach(() => {
// Очищает базу данных и добавляет данные тестирования.
// Jest будет ждать завершения этого Promise перед запуском тестов.
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();
});
});
Здесь beforeAll
гарантирует, что база данных настроена, перед запуском тестов. If setup was synchronous, you could do this without beforeAll
. Ключевым является то, что Jest будет ждать разрешения промиса, поэтому вы можете установить асинхронно.
Если вместо запуска перед выполнением всех тестов, вы хотите что-то запускать перед каждым тестом, то используйте beforeEach
.
Если вместо запуска перед выполнением всех тестов, вы хотите что-то запускать перед каждым тестом, то используйте beforeEach
.
beforeEach(fn, timeout)
Выполняет функцию перед выполнением тестов в текущем файле. Если функция возвращает промис или является генератором, Jest ждет пока промис разрешится, а затем запускает тесты.
Optionally, you can provide a timeout
(in milliseconds) for specifying how long to wait for each row before aborting. The default timeout is 5 seconds.
This is often useful if you want to reset some global state that will be used by many tests.
Например:
const globalDatabase = makeGlobalDatabase();
beforeEach(() => {
// Clears the database and adds some testing data.
// Jest будет ждать завершения этого Promise перед запуском тестов.
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);
});
});
Here the beforeEach
ensures that the database is reset for each test.
If beforeEach
is inside a describe
block, it runs for each test in the describe block.
If you only need to run some setup code once, before any tests run, use beforeAll
instead.
describe(name, fn)
describe(name, fn)
группирует связанные по логике тесты в один блок. Например, если у вас есть объект myBeverage
, который должен быть вкусным (ключ "delicious"), но не кислым (ключ "sour"), вы можете протестировать его следующим образом:
const myBeverage = {
delicious: true,
sour: false,
};
describe('my beverage', () => {
test('is delicious', () => {
expect(myBeverage.delicious).toBeTruthy();
});
test('is not sour', () => {
expect(myBeverage.sour).toBeFalsy();
});
});
Это не обязательно, вы можете писать тесты в глобальном уровне. Но это может быть удобно, группировать некоторые тесты вместе.
You can also nest describe
blocks if you have a hierarchy of tests:
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')).toThrow(CustomError);
});
test('with extra whitespace throws CustomError', () => {
expect(() => binaryStringToNumber(' 100')).toThrow(CustomError);
});
});
describe('given a valid binary string', () => {
test('returns the correct number', () => {
expect(binaryStringToNumber('100')).toBe(4);
});
});
});