我正在尝试测试我的MongoDB库。我想验证一个变量是否是我的库的示例,以及该方法是否被正确调用。我正在使用jest进行测试。
import { MongoLib } from '../index'
let database: any
beforeAll(() => {
database = new MongoLib({
hostname: 'localhost',
database: 'test',
password: encodeURI('password'),
username: 'anothertest'
})
})
afterAll(() => {
database = null
})
describe('Initializing class', () => {
test('isInstanceOf', () => {
expect(database).toBeInstanceOf(MongoLib)
})
})
describe('Methods#ToBeThruty', () => {
test('getAllToBeThruty', async () => {
try {
const users = await database.getAll('users')
expect(users).toBeTruthy()
} catch (error) {
console.error(error)
}
})
test('getToBeThruty', async () => {
try {
const user = await database.get('users', '60e13de94a37e1c6d0174749')
expect(user).toBeTruthy()
} catch (error) {
console.error(error)
}
})
test('createToBeThruty', async () => {
try {
const user = await database.create('users', { user: 'hello', email: 'world' })
expect(user).toBeTruthy()
} catch (error) {
console.error(error)
}
})
test('updateToBeThruty', async () => {
try {
const user = await database.update('users', '60e13de94a37e1c6d0174749', { user: 'world', email: 'hello' })
expect(user).toBeTruthy()
} catch (error) {
console.error(error)
}
})
test('replaceToBeThruty', async () => {
try {
const user = await database.replace('users', '60e13de94a37e1c6d0174749', { user: 'world', email: 'hello' })
expect(user).toBeTruthy()
} catch (error) {
console.error(error)
}
})
test('deleteToBeThruty', async () => {
try {
const user = await database.delete('users', '60e13de94a37e1c6d0174749')
expect(user).toBeTruthy()
} catch (error) {
console.error(error)
}
})
})
字符串
测试通过了,但在那之后,我得到了这个错误:
MongoParseError:URI在parseSrvConnectionString中没有主机名、域名和TLD(/Users/diesanromero/Documents/KemusCorp/OpenSource/mongodb- crud/node_modules/mongodb/lib/core/uri_parser.js:51:21)
在MongoLib.Object..MongoLib.connect(/Users/diesanromero/Documents/KemusCorp/OpenSource/mongodb- crud/src/index.ts:25:29)在MongoLib.(/Users/diesanromero/Documents/KemusCorp/OpenSource/mongodb- crud/src/index.ts:40:17)
MongoLib的代码如下:
import { MongoClient, ObjectId } from 'mongodb'
import Settigns from "./settings"
export class MongoLib {
private credentials: string
private database: string
private host: string
private options: object
private client: MongoClient
private url: string
private static connection: any
constructor(settings: Settigns) {
this.credentials = `${settings.username}:${settings.password}`
this.host = `${settings.hostname}:${settings.port}`
this.database = settings.database
this.url = `mongodb+srv://${this.credentials}@${this.host}/${settings.database}?retryWrites=true&w=majority`
this.options = { useUnifiedTopology: true }
this.client = new MongoClient(this.url, this.options)
}
private connect () {
if (!MongoLib.connection) {
MongoLib.connection = new Promise((resolve, reject) => {
this.client.connect((error: Error) => {
if (error) reject(error)
else {
resolve(this.client.db(this.database))
console.log('Connected successfully to MongoDB.')
}
})
})
}
return MongoLib.connection
}
public async getAll (collection: string, query?: object) {
return this.connect()
.then((db: any) => {
return db.collection(collection).find(query).toArray()
})
}
public async get (collection: string, id: string) {
return this.connect()
.then((db:any) => {
return db.collection(collection).findOne({ _id: new ObjectId(id) })
})
}
public async create (collection: string, data: object) {
return this.connect()
.then((db: any) => {
return db.collection(collection).insertOne(data)
})
.then(() => 'Data inserted')
}
public async update (collection: string, id: string, data: object) {
return this.connect()
.then((db: any) => {
return db.collection(collection).updateOne({ _id: new ObjectId(id) }, { $set: data }, { upsert: true })
})
.then(() => 'Data updated')
}
public async replace (collection: string, id: string, data: object) {
return this.connect()
.then((db: any) => {
return db.collection(collection).replaceOne({ _id: new ObjectId(id) }, data, { upsert: true })
})
.then(() => 'Data replaced')
}
public async delete (collection: string, id: string) {
return this.connect()
.then((db: any) => {
return db.collection(collection).deleteOne({ _id: new ObjectId(id) })
})
.then(() => 'Data deleted')
}
}
型
请记住,settings.js是一个带有基本配置的导出接口。
1条答案
按热度按时间yc0p9oo01#
确保连接字符串在开头有以下内容。
其次,检查您的密码是否符合以下列表,然后将其从以下enter image description here中替换
第三种方法,为我工作是创建一个新的用户与密码没有任何特殊字符。