[Node.js] Mongoose の virtual attributes を sinon で stub 化する

Tadashi Shigeoka ·  Tue, July 7, 2015

Mongoose の virtual attributes を sinon で stub 化する方法をご紹介します。

mongoose | マングース

まず、下記のような Product model が定義されているとします。

# define Mongoose Product model
mongoose = require 'mongoose'

productSchema = new mongoose.Schema({
  # something
})

productSchema.virtual('discountPercentage').get ()->
  # calculate discountPercentage
  return discountPercentage

Product = mongoose.model 'Product', productSchema

そして、テストコードで discountPercentage virtual をスタブ化するコードは下記のような感じです。

# in test code
sinon = require 'sinon'

product = new Product()

console.log product.discountPercentage
# discountPercentage virtual の計算結果を返す

stub = sinon.stub product, 'get'
stub.withArgs('discountPercentage').returns 50

console.log product.discountPercentage
# 必ず 50 を返す

# 使い終わったら、忘れずに restore しましょう
stub.restore()

ポイントは sinon.stub mongooseInstance, ‘get’stub.withArgs(‘virtualName’).returns の部分で virtualName の返り値をスタブ化しているという点だけです。

参考情報