unref
Средой тестирования по умолчанию для Jest
является среда, подобная браузеру, через jsdom
.
unref
- специальная функция, предоставляемаяNode
.Он не реализован в браузерах или jsdom
, но он реализован в тестовой среде "node" в Jest
.
Похоже, что для тестирования приложения Nuxt
требуетсякак среда Node
для запуска сервера, так и среда jsdom
для проверки полученного пользовательского интерфейса.
Это можно сделать, установив для среды тестирования значение "узел" и инициализировав window
с помощью jsdom
во время настройки теста.
время ожидания
Jest
будет "ждать, если вы предоставите аргумент для функции теста, обычно называемой done
" .Это относится к функциям тестирования и настройкам, таким как beforeAll
.
Ваша функция beforeAll
имеет аргумент done
, который никогда не вызывается.Jest
будет ожидать вызова done
или истечения времени ожидания, настроенного с помощью jest.setTimeout
(по умолчанию 5 секунд).
Вы используете функцию async
ииспользование await
для асинхронной части функции, поэтому вам не нужно done
.Измените функцию beforeAll
, чтобы она не принимала никаких параметров, и это не позволит Jest
ожидать вызова done
.
В моих тестах запуск сервера Nuxt
занимает довольно много времени, поэтому вы можетепередайте значение timeout
в качестве дополнительного параметра в beforeAll
, чтобы увеличить время ожидания только для этой функции.
Вот обновленный тест с этими изменениями:
/**
* @jest-environment node
*/
// TODO: Set the environment to "node" in the Jest config and remove this docblock
// TODO: Move this to a setup file
const { JSDOM } = require('jsdom');
const { window } = new JSDOM(); // initialize window using jsdom
const resolve = require('path').resolve;
const { Nuxt, Builder } = require('nuxt');
// Nuxt instance
let nuxt = null;
// Our page to test
let homePage = null;
beforeAll(async () => {
// Configuration
const rootDir = resolve(__dirname, '../..');
let config = {};
config = require(resolve(rootDir, 'nuxt.config.js'));
config.rootDir = rootDir; // project folder
config.env.isDev = false; // dev build
config.mode = 'universal'; // Isomorphic application
nuxt = new Nuxt(config);
await new Builder(nuxt).build();
nuxt.listen(3001, 'localhost');
homePage = await nuxt.renderAndGetWindow('http://localhost:3001/');
}, 20000); // Give the beforeAll function a large timeout
afterAll(() => {
nuxt.close();
});
describe('homepage', () => {
it('should do something', () => {
});
});