【发布时间】:2018-03-04 08:49:01
【问题描述】:
我对测试 nodejs 还是很陌生。所以我的方法可能是完全错误的。我尝试在不访问数据库的情况下测试 mongoose 模型预保存挂钩。这是我的模型:
// models/user.js
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
UserSchema = new Schema({
email: {type: String, required: true},
password: {type: String, required: true}
});
UserSchema.pre('save', function (next) {
const user = this;
user.email = user.email.toLowerCase();
// for testing purposes
console.log("Pre save hook called");
next();
});
module.exports = mongoose.model("User", UserSchema);
正如我所说,我不想用我的测试访问数据库,所以我尝试使用 Users save() 方法的 sinon 存根:
// test/models/user.js
const sinon = require("sinon");
const chai = require("chai");
const assert = chai.assert;
const User = require("../../models/user");
describe("User", function(){
it("should convert email to lower case before saving", (done) => {
const user = new User({email: "Valid@Email.com", password: "password123"});
const saveStub = sinon.stub(user, 'save').callsFake(function(cb){ cb(null,this) })
user.save((err,res) => {
if (err) return done(err);
assert.equal(res.email,"valid@email.com");
done();
})
})
});
但是,如果我这样做,则不会调用预保存挂钩。我是在错误的道路上还是我错过了什么?或者是否有另一种触发预保存钩子并测试其结果的方法?提前非常感谢!
【问题讨论】:
标签: node.js unit-testing mongoose mocha.js sinon