Я пытаюсь подключиться к базе данных mongo с помощью драйвера mongo nodejs, и я делаю это в проекте кипариса. Я получаю ошибку в заголовке. Ниже приведена упрощенная версия моего кода.
import {MongoClient} from 'mongodb';
export class SomeRepository {
static insertSomething(): void {
// Error in the line below: MongoRuntimeError Unable to parse localhost:27017 with URL
const client = new MongoClient('mongodb://localhost:27017');
}
}
MongoDB работает, потому что я могу подключиться с терминала. Также попытался заменить localhost на 127.0.0.1 и добавить параметр authSource в строку подключения.
Причина, по которой я упоминаю кипарис, заключается в том, что в простом проекте node, который подключается только к mongodb, все работает так, как ожидалось. Package.json ниже
{
"name": "e2e",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"cypress": "10.8.0",
"cypress-wait-until": "1.7.2",
"headers-utils": "3.0.2",
"mongodb": "4.10.0",
"otplib": "12.0.1",
"pg": "8.7.3",
"pg-native": "3.0.1",
"typescript": "4.9.3"
}
}
Да, это то, что я говорю. В основном у меня есть это: cy.then(() => { SomeRepository.insertSomething(); });

Ошибка заключается в том, как вы передаете URL-адрес, необходимо, чтобы вы следовали шаблону, в mongodb для подключения вам нужен этот шаблон, который я передам ниже:
Формат:
mongodb://<user>:<password>@<host>
Формат с заполненными значениями:
mongodb://root:mypassword@localhost:27017/
Аутентификация отключена на localhost db.
Строка подключения не была проблемой. Та же строка подключения отлично работала в консоли
Причина, по которой это не работает, заключается в том, что вы вызываете библиотеку NodeJS в тесте кипариса. Тесты Cypress запускаются внутри браузера и не могут запускать библиотеки nodejs.
Если вы хотите выполнить код nodejs в кипарисе, вы должны создать задачу кипариса https://docs.cypress.io/api/commands/task#Syntax
// cypress.config.js
import { SomeRepository } from ‘./file/somewhere’
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
on(‘task’, {
insertSomething() {
return SomeRepository.insertSomething();
}
}
}
}
})
// to call in a cypress test
it(‘test’, function () {
cy.task(‘insertSomething’).then(value => /* do something */);
}
});
Когда вы говорите, что это проект кипариса, вы пытаетесь выполнить этот код в тесте кипариса?