国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一步一步搭建react應用-node中使用 mocha + supertest + should 來

chengtao1633 / 3350人閱讀

摘要:一步一步構建一個應用開篇地址是一個單元測試框架,類似于前端的語法也相近用來測試接口的庫斷言庫,可讀性很高搭建項目根目錄下新建文件夾,中監聽文件下的所有文件接口描述這里我們來測試一個添加一條電影的接口河正宇金允石鄭滿植動作犯罪

[一步一步構建一個react應用-開篇](https://segmentfault.com/a/11...

git地址

mocha 是一個node單元測試框架,類似于前端的jasmine,語法也相近

supertest 用來測試node接口的庫

should nodejs斷言庫,可讀性很高

搭建

npm install mocha should supertest --save-dev

項目根目錄下新建test文件夾,movies.spec.js

package.json中

"scripts": {
    "start": "pm2 start ecosystem.config.js",
    "test": "mocha --watch" //監聽 test文件下的所有文件
  },

接口描述

這里我們來測試一個添加一條電影的接口

    method: POST
    api:   /api/movies
    document:  {
        "title": "movie0",
        "thumb": "public/p1075586949.jpg",
        "actors": [
            "河正宇",
            "金允石",
            "鄭滿植"
        ],
        "type": [
            "動作",
            "犯罪"
        ],
        "instruct": "instruct...",
        "time": "2010-12-22(韓國)",
    }

這里電影信息會保存到movies集合中,類型信息保存在types集合中
需要注意的是如果多條電影有相同的type,則同一個電影類型在collection中只存一次,但會inc count字段

大體代碼

/routes/movies.js

 const MoviesModel = require("../models/movies_model")
 const CONFIG = require("../config/config")

 function callback(err, docs, res, next) {
    if (err) {
        next(err)
        return
    }
    res.json({
        code: CONFIG.ERR_OK,
        data: docs
    })
}

 router.post("/", function (req, res, next) {
    MoviesModel.addMovies(req.body, (err, docs) => {
        callback(err, docs, res, next)
    })
 });

/models/movies_model.js

    const TypeModel = require("./type_model")
    class MoviesModel{

        addMovies(data, callback) {
            const types = data.type
            DB.connect().then((db, err) => {
                TypeModel.addTypes(types, db) //保存分類
                this.insertOne(db, data, callback)
            }).catch(e => {
                callback(e)
            })
        }
    }

/models/type_model.js

 class Type{

    addTypes(typesArr, db) {
            const Types = db.collection("types")
            typesArr.forEach(item => {
                Types.update({
                    "type_name": item
                }, {
                    "$inc": { count: 1 }
                }, { upsert: true })
            })
        }

 }

測試

測試中我們錄入兩條電影信息,兩條的type字段中會有一個相同的類型

我們要驗證的結論:

兩條電影都成功錄入,types集合中有三條document,"動作"的count是2,另兩條count是1

當前環境是test時,使用測試數據庫

/config/db.js

let db_name="Movies"
if(process.env.NODE_ENV=="test"){
    db_name="Movies_test"
}
const url = f(`mongodb://%s:%s@localhost:3307/${db_name}?authMechanism=%s`, user, pwd, authMechanism)

測試數據

const movieInfo = {
    "title": "movie0","thumb": "public/p1075586949.jpg",
    "actors": [
        "河正宇",
    ],
    "type": [
        "動作",
        "犯罪"
    ],
    "instruct": "instruct...","time": "2010-12-22(韓國)",
}
const movieInfo1 = {
    "title": "movie1","thumb": "public/p1075586949.jpg",
    "actors": [
        "河正宇",
    ],
    "type": [
        "動作",
        "愛情"
    ],
    "instruct": "instruct...","time": "2010-12-22(韓國)",
}

測試代碼

process.env.NODE_ENV = "test" //運行時,會將當前環境設置為test,連接數據庫時使用Movies_test庫,如上
const should = require("should")
const request = require("supertest")
const app = require("../app")

describe("Movies Test",()=>{

    describe("POST /movies",()=>{
        //每個it語句運行開始之前會插入數據
        beforeEach(function (done) {
            request(app) //啟動node服務
                .post("/api/movies").send(movieInfo).then(() => {
                    return request(app).post("/api/movies").send(movieInfo1)
                }).then(res => {
                    done()
                })
        })

        //每個it語句運行完之后會清除表數據
        afterEach(function (done) {
            MoviesModel.remove(() => {
                TypeModel.remove(() => {
                    done()
                })
            })
       })

        //測試錄入成功
        it("add movie and get the added movie", function (done) {
            request(app)
                .get("/api/movies")
                .end((er, res) => {
                    should(res.body.data).have.length(2)
                    should(res.body.data[0]).have.property("title", "movie1")
                    done()
                })
        })

        //類型已經存在的就不在存了
        it("repeat type not saved,will only increment count", function (done) {
            request(app)
                .get("/api/types")
                .then(res => {
                    should(res.body.data).have.length(3)
                    should(res.body.data[0]).have.property("count", 2) //"動作"的count是2
                    should(res.body.data[1]).have.property("count", 1) 
                    should(res.body.data[2]).have.property("count", 1) 
                    done()
                })
        })
    })

})

詳細完整的對每個接口的測試見 test

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88487.html

相關文章

  • 步一搭建react應用-node使用 mocha + supertest + should

    摘要:一步一步構建一個應用開篇地址是一個單元測試框架,類似于前端的語法也相近用來測試接口的庫斷言庫,可讀性很高搭建項目根目錄下新建文件夾,中監聽文件下的所有文件接口描述這里我們來測試一個添加一條電影的接口河正宇金允石鄭滿植動作犯罪 [一步一步構建一個react應用-開篇](https://segmentfault.com/a/11... git地址 mocha 是一個node單元測試框架,類...

    dadong 評論0 收藏0
  • 步一步構建一個react應用-開篇

    摘要:線上地址主要從下面幾點入手一步一步搭建應用前后端初始化爬取豆瓣電影的電影信息開啟身份認證使用來做基于的用戶身份認證中使用來寫單元測試部署技術棧沒用之后改運行代碼到本地項目地址喜歡就一下吧前端后端需要安裝本項目端口并開啟權限認證。 介紹 斷斷續續利用周末時間做了兩個月,基于react和express的一個小項目差不多做完了。所以想寫一系列文章來總結一下前后端用到技術及遇到的問題和解決方法...

    BigTomato 評論0 收藏0
  • 步一步構建一個react應用-開篇

    摘要:線上地址主要從下面幾點入手一步一步搭建應用前后端初始化爬取豆瓣電影的電影信息開啟身份認證使用來做基于的用戶身份認證中使用來寫單元測試部署技術棧沒用之后改運行代碼到本地項目地址喜歡就一下吧前端后端需要安裝本項目端口并開啟權限認證。 介紹 斷斷續續利用周末時間做了兩個月,基于react和express的一個小項目差不多做完了。所以想寫一系列文章來總結一下前后端用到技術及遇到的問題和解決方法...

    lylwyy2016 評論0 收藏0
  • 步一搭建react應用-前后端初始化

    摘要:一步一步搭建應用項目初始化一步一步構建一個應用開篇地址前端初始化目錄結構。。。。。。 一步一步搭建react應用-項目初始化 [一步一步構建一個react應用-開篇](https://segmentfault.com/a/11... git地址 前端初始化 # 目錄結構 +----/build + +----/config + +----+/pu...

    fevin 評論0 收藏0
  • 步一搭建react應用-前后端初始化

    摘要:一步一步搭建應用項目初始化一步一步構建一個應用開篇地址前端初始化目錄結構。。。。。。 一步一步搭建react應用-項目初始化 [一步一步構建一個react應用-開篇](https://segmentfault.com/a/11... git地址 前端初始化 # 目錄結構 +----/build + +----/config + +----+/pu...

    MartinHan 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<