Я пытаюсь создать несколько простых модульных тестов для небольшого сервиса, выполняющего веб-запросы, и мне очень трудно заставить шпионов Jest работать должным образом. Я обнаружил, что функциональность jest.spyOn
будет работать, но это зависит от того, где именно находится тестовый файл, что не имеет смысла для меня. Итак, у меня есть что-то вроде этого:
src / getTimetableEventsAsyn c. js
const getTimetableEventsAsync = async (timetableSecrets, preferredUsername) => {
console.log(got.get.toString());
return got.get("someURL").json();
src / getTimetableEventsAsyn c. unit.test. js (это работает)
const got = require('got');
const { getTimetableEventsAsync } = require('./getTimetableEventsAsync');
describe('getTimetableEvents', () => {
it('Tests the mock', async () => {
jest.spyOn(got, 'get').mockImplementation(() => {
console.log('foo');
});
await getTimetableEventsAsync('', '');
});
});
tests / getTimetableEventsAsyn c .unit.test. js (это не работает)
const got = require('got');
const { getTimetableEventsAsync } = require('../src/getTimetableEventsAsync');
describe('getTimetableEvents', () => {
it('Tests the mock', async () => {
jest.spyOn(got, 'get').mockImplementation(() => {
console.log('foo');
});
await getTimetableEventsAsync('', '');
});
});
Меня смущает то, что два тестовых файла ведут себя по-разному. Журнал, который работает:
console.log src/getTimetableEventsAsync.js:11
function mockConstructor() {
return fn.apply(this, arguments);
}
console.log src/mocks.unit.test.js:7
foo
Журнал, который не работает:
console.log src/getTimetableEventsAsync.js:11
(url, options) => got(url, { ...options, method })
Так что, очевидно, jest.spyOn
не работает, когда мой тестовый файл находится внутри моего Каталог tests
, но тот же код работает в моем каталоге src
нормально. Jest
всегда запускается на root, и я могу запустить эти тесты в одном и том же тесте с разными результатами.
Может кто-нибудь сказать мне, что мне здесь не хватает? Почему я не могу запустить свои тесты в каталоге tests
? В идеале, я бы хотел, чтобы они работали здесь, так как эти файлы намного проще исключить из любых развертываний и т. Д. c.
Так что проверка в tests / gettimetableEventsAsyn c .unit.test. js, чтобы убедиться, что шпион сработал, показывает, что локально в тесте он работает нормально, несмотря на то, что сразу после несоответствия.
console.log tests/getTimetableEventsAsync.unit.test.js:10
function mockConstructor() {
return fn.apply(this, arguments);
}
console.log src/getTimetableEventsAsync.js:11
(url, options) => got(url, { ...options, method })