使用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进行断言。
(实际上我正在这样做,可能会在之后进行修改)