[Node.js] Mongoose の virtual attributes を sinon で stub 化する
Mongoose の virtual attributes を sinon で stub 化する方法をご紹介します。
まず、下記のような 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 の返り値をスタブ化しているという点だけです。
参考情報
- Stub API – Sinon.JS – Documentation
- node.js – Stubbing virtual attributes of Mongoose model – Stack Overflow