MongooseでDBのMockをする時のメモ

自分向けのメモ。

express + mongoose + mochaでWebアプリを作ることがよくあります。

テストを書くときは、できるだけModelを分けてDBにアクセスしないようにはしているのですが、 そうもいかないときもやっぱりあるわけで。。。

mongooseのMLを眺めてたら似たような投稿があったので試してみました。
https://groups.google.com/forum/?fromgroups=#!topic/mongoose-orm/SXLDA2uNAkw

Model

mongoose = require 'mongoose'
    
Shema = new mongoose.Schema
  id: {type: String}

exports.Shema = mongoose.model 'Shema', Schema

Router

Schema = require('./model').Schema
    
exports.index = (req, res) ->
  Schema.findOne {}, (error, result) ->
    throw error if error
    if result.flg
      render 'index'
    else
      redirect '/fail'

Test

Schema = require('./model').Schema
route = require('./route')
chai = require 'chai'
should = chai.should()

descript 'index', ->
  req =
    params: ''
    body: ''

  res =
    render: (view, params) ->

  Schema.base.Model.findOne = (obj, callback) ->
    callback null, {flg: true}

  it 'should render index', (done) ->
    res =
      render: (view, params) ->
        view.should.equal 'index'
        done()

    route.index req, res

Mongooseのオブジェクトを拡張しちゃうわけですね。
ロジックが単純な場合はこれで十分かもしれません。