使用Docker构建MongoDB环境并进行测试的话题

使用Docker创建MongoDB。

docker run -d --name dev-mongo -p 27017:27017 mvertes/alpine-mongo

-d: 在后台启动
–name dev-mongo:指定名称为 dev-mongo
-p:将主机的27017端口访问转发到容器的27017端口
mvertes/alpine-mongo:使用alpine镜像的mongo版本

确认启动

在这篇文章中,保持启动状态。

$ docker ps
CONTAINER ID        IMAGE                  COMMAND                 CREATED             STATUS              PORTS                                 NAMES
a3d250b5c18b        mvertes/alpine-mongo   "/root/run.sh mongod"   2 seconds ago       Up 3 seconds        0.0.0.0:27017->27017/tcp, 28017/tcp   dev-mongo

先前的設定依然有效。
IMAGE是mvertes/alpine-mongo。
PORTS將主機的27017端口轉發到容器的27017端口。
NAMES是dev-mongo。

補足として、停止と削除は以下のコマンドから。

$ docker stop dev-mongo
$ docker rm dev-mongo

访问

dev-mongo的内部访问

docker exec -it dev-mongo /bin/sh

在dev-mongo内执行mongo命令

mongo

Mongo相关命令的摘要

// 終了
quit()

// adminで操作
use admin

// コレクションの一覧
show collections

当执行它们时的代码

$ docker exec -it dev-mongo /bin/sh
bash-4.3# psql -U postgres
psql (10.1)
> use admin
switched to db admin
> quit()
/ # exit

考试准备

使用npm安装mongodb。
由于想要使用TypeScript,所以也要安装@types/mongodb。

npm install mongodb @types/mongodb --save

考试代码

import * as mongodb from "mongodb";
import { Db } from "mongodb";

const MongoClient = new mongodb.MongoClient();
let mongoDb: Db;

// db名
const dbName = "TEST";

// allTest()メソッドを実行
allTest()
    .then( () => {
        // 成功した場合
        console.log( "Complete" );
    } )
    .catch( ( e ) => {
        // 失敗した場合
        console.warn( e );
    } );

/**
* 全テスト実行
**/
async function allTest() {
    await before();

    // 1000件インサート
    await insertTest();

    // todo 必要ならここに他のテストのメソッドを追加したり
}

/**
* 事前実行
**/
async function before(): Promise<any> {
    const db = await MongoClient.connect( "mongodb://localhost:27017/" );
    try {
        // テストで使用したいdb名と同名のdbがあったらdrop
        await db.dropCollection( dbName );
    } catch ( err ) {
        // 存在しない場合は無視
    }
    // 新しくdbを作る
    await db.createCollection( dbName );
    mongoDb = db;
}

/**
* 挿入テスト
**/
async function insertTest() {
    const coll = mongoDb.collection( dbName );

    const timeName = "1000件インサート";
    console.time( timeName );

    const len = 1000 | 0;
    let i = 0 | 0;
    while ( i < len ) {
        i = (i + 1) | 0;

        await coll.insertOne( {
            id: i,
            name: `username${i}`
        } );
    }
    console.timeEnd( timeName );

    const count = await coll.count( {} );
    if ( count === len ) {
        console.log( "SUCCESS" );
    } else {
        console.log( "FAILURE" );
    }
}

我现在正在正常地编写代码,但是我认为最好使用Mocha来进行测试,并使用power-assert进行断言。
(实际上我正在这样做,可能会在之后进行修改)

广告
将在 10 秒后关闭
bannerAds