Я пытаюсь добавить несколько тестов в приложение узла, которое я разрабатываю. Я просмотрел шутливую документацию для ручного издевательства и попытался создать папку издевается в соответствии с инструкциями. Пожалуйста, ознакомьтесь со структурой папок ниже.
app
- firebase
- fb.js
- __mocks__
- fb.js
- firebase-admin.js
- resolvers
- mutation.js
__tests__
- user.spec.js
Как видите, я попытался смоделировать два модуля: fb.js (пользовательский модуль) и firebase-admin.js (модуль node_modules). Насмешка firebase-admin.js работает без проблем. Но макет пользовательского модуля даже не воспринимается как шутка. Фактический модуль fb.js вызывается все время.
Я попытался создать каталог издевается для различных пользовательских модулей в моем проекте, но ни один из них не подхватывается. Есть ли какая-то дополнительная конфигурация, которую мне не хватает ??. в настоящее время я работаю над этой проблемой, издеваясь только над модулем узла firebase-admin. Но я хочу издеваться над пользовательским модулем вместо модуля firebase-admin, чтобы мои конфигурации firebase также издевались. Пожалуйста, дайте мне знать, если потребуется дополнительная информация.
__mocks__/fb.js
module.exports = {
auth: jest.fn(() => "testing")
};
__mocks__/fb-admin.js
module.exports = {};
__tests__/user.spec.js
const request = require('supertest');
const server = require('../app').createHttpServer({});
const app = request(server);
describe('login resolvers', () => {
test('should sign up user', async () => {
const response = await app.post('/')
.send({
query: `mutation {
signUp(idToken: "esd45sdfd...") {
user {
id
locked
revoked
}
}
}
`,
})
.set('Accept', 'application/json')
.expect(200);
console.info(response.text);
});
});
приложение/преобразователи/mutation.js
const admin = require('../firebase/fb');
/* other app code here */
Из документы по ручным макетам:
When we require that module in our tests, then explicitly calling
jest.mock('./moduleName')
is required.If the module you are mocking is a Node module (e.g.:
lodash
), the mock should be placed in the__mocks__
directory adjacent tonode_modules
(unless you configured roots to point to a folder other than the project root) and will be automatically mocked. There's no need to explicitly calljest.mock('module_name')
.
Нет. Вам нужно сказать jest, чтобы он издевался над модулем, когда этого требует sut.
Это чрезвычайно запутанный разговор для чтения. Из ответа: «Нет необходимости явно вызывать jest.mock('module_name')». -> Комментарий: «явный jest.mock не требуется, верно?» -> Следующий комментарий: «Нет. Вам нужно сказать шутке, чтобы он издевался над модулем».
Я нахожусь в той же ситуации, когда мне не требуется издевательский модуль в моих тестах, но он используется внутри. Вызов jest.mock('module_name') не извлекает модуль из __mocks__
. Но и отключение тоже ничего не дает. Каковы мои другие варианты?
Мариана. «Нет необходимости...», когда модуль узла. Оператор спрашивает о пользовательском модуле (а не о модуле узла) и, следовательно, требуется.
Означает ли «рядом с node_modules», что вы помещаете каталог __mocks__ в родительскую папку «node_modules»?
Пришлось очень внимательно читать документацию. Особенно часть про «если вы не настроили корни так, чтобы они указывали на папку, отличную от корня проекта». Дважды проверьте, что вы настроили папку __mocks__
в исходной папке, которую вы указали для Jest.
Спасибо. Я не требую издевательского модуля в своих тестах. Он используется внутри, когда выполняется тестовый код. Итак, согласно документации, явный jest.mock не требуется, верно?