我想创建一个猫鼬存根save在特定模型的方法,让我创造我的模型的任何实例将调用存根而不是正常的猫鼬的save方法.我的理解是,这样做的唯一方法是将整个模型存根如下:
var stub = sinon.stub(myModel.prototype);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这行代码导致我的测试抛出以下错误:
TypeError: Cannot read property 'states' of undefined
Run Code Online (Sandbox Code Playgroud)
有谁知道这里出了什么问题?
给出一个简单的Mongoose模型:
import mongoose, { Schema } from 'mongoose';
const PostSchema = Schema({
title: { type: String },
postDate: { type: Date, default: Date.now }
}, { timestamps: true });
const Post = mongoose.model('Post', PostSchema);
export default Post;
Run Code Online (Sandbox Code Playgroud)
我希望测试这个模型,但我遇到了一些障碍.
我当前的规范看起来像这样(为简洁起见省略了一些东西):
import mongoose from 'mongoose';
import { expect } from 'chai';
import { Post } from '../../app/models';
describe('Post', () => {
beforeEach((done) => {
mongoose.connect('mongodb://localhost/node-test');
done();
});
describe('Given a valid post', () => {
it('should create the post', (done) => {
const …Run Code Online (Sandbox Code Playgroud) 我想将saveMongoose模型可用的方法存根.这是一个示例模型:
/* model.js */
var mongoose = require('mongoose');
var userSchema = mongoose.Schema({
username: {
type: String,
required: true
}
});
var User = mongoose.model('User', userSchema);
module.exports = User;
Run Code Online (Sandbox Code Playgroud)
我有一些将调用该save方法的辅助函数.
/* utils.js */
var User = require('./model');
module.exports = function(req, res) {
var username = req.body.username;
var user = new User({ username: username });
user.save(function(err) {
if (err) return res.end();
return res.sendStatus(201);
});
};
Run Code Online (Sandbox Code Playgroud)
我想检查一下user.save使用单元测试在我的辅助函数中调用.
/* test.js */
var mongoose = require('mongoose');
var createUser = …Run Code Online (Sandbox Code Playgroud) 我试图存根此对象中使用的mongoose依赖项:
var Page = function(db) {
var mongoose = db || require('mongoose');
if(!this instanceof Page) {
return new Page(db);
}
function save(params) {
var PageSchema = mongoose.model('Page');
var pageModel = new PageSchema({
...
});
pageModel.save();
}
Page.prototype.save = save;
}
module.exports = Page;
Run Code Online (Sandbox Code Playgroud)
使用这个问题的答案,我试过这样做:
mongoose = require 'mongoose'
sinon.stub mongoose.Model, 'save'
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:
TypeError:尝试将undefined属性保存为函数
我也试过这个:
sinon.stub PageSchema.prototype, 'save'
Run Code Online (Sandbox Code Playgroud)
然后我得到了错误:
TypeError:应该包装对象的属性
有人能帮忙吗?我究竟做错了什么?