#node.js #npm #package.json
Вопрос:
Итак, у меня есть приложение, тесты которого не проходят. Гипотеза состоит в том, что машина, на которую я ее клонировал, имела другую версию node, поэтому я изменил версию node/npm на версию, равную машине, на которой проходят тесты Мокко. Я предполагал, что это загрузит те же самые пакеты, что и исходная машина, но это не так, даже когда я удаляю каретку на номерах версий пакетов и даже если я это сделаю rm -rf node_modules
.
Как мне убедиться, что у меня одинаковые пакеты? Включая пакеты, которые зависят от пакетов в package.json
файле.
Провалившийся тест-это следующий:
the error is: expected 400 to equal 201
1) should create and get notes for a patient? /api/v2/patients/:patientId/notes
27 passing (3s)
1 pending
1 failing
1) Testing patients end points.
given an user
should create and get notes for a patient? /api/v2/patients/:patientId/notes:
Error: Internal server error: expected 400 to equal 201
at Object.<anonymous> (test/testutils/auth.utils.ts:226:11)
at Generator.next (<anonymous>)
at fulfilled (test/testutils/auth.utils.ts:5:58)
at runMicrotasks (<anonymous>)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
Что, я полагаю, относится к этому методу:
export async function createPatientNote(
tokenObjectDto: TokenObjectDto,
patientPui: string,
noteText: string,
isPublic: boolean,
noteType: NoteType,
visibleAfter?: Date,
title?: string
): Promise<ViewNoteDto> {
const urlPath = p().api.v2.patients.$patientId.notes.$url.replace(':patientId', patientPui)
const newNoteDto = new NewNoteDto(
patientPui,
noteType,
noteText,
!isPublic,
visibleAfter,
title,
[
new class implements ITag {
key = 'Test';
value = `createPatientNode for ${patientPui}`;
}
]
)
const res = await request(app)
.post(urlPath)
.set('Authorization', 'Bearer ' tokenObjectDto.token)
.send(newNoteDto);
expect(res.status).to.equal(StatusCodes.CREATED);
const viewNoteDto = res.body
expect(viewNoteDto.pui).equal(patientPui)
return viewNoteDto
}
Это package-lock.json
файл:
https://gist.github.com/ldco2016/3bb682442b6d16976f8ffbd4ec53809d
Похоже, он выдает ошибку до или при попытке выполнить urlPath
.
Комментарии:
1. Для этого и предназначен файл package-lock.json. Используйте его
npm ci
для получения повторяемых установок2. Интересная ситуация… Я думаю, что вашему вопросу было бы полезно немного объяснить, почему вам абсолютно, на 1000%, нужны точно соответствующие версии пакетов (кроме основных выпусков и некомпетентных сопровождающих), и какие тесты конкретно не работают из-за несоответствующих версий пакетов. Минимальные версии все хороши и хороши, но пакеты должны быть модульными по многим причинам (совместимость, исправления/исправления безопасности и другие). Я бы согласился с комментарием @Joe о том, что вы, возможно, захотите сосредоточиться на целостности
package-lock.json
versuspackage.json
.3. @Джо, так что мне нужно получить
package-lock.json
файл с другими машинами.4. Для приложения это, как правило, файл, который вы хотите сохранить в системе управления версиями вместе с кодом. Это позволяет повторять установки с течением времени.
5. @Джо, я клонировал проект, и
package-lock.json
файл не был включен