我是Node.js,Mongoose的新手,并且在这个环境中进行测试.我在单独的文件中声明了以下架构.
Issue = mongoose.model("Issue", {
identifier: String,
date: String,
url: String,
name: String,
thumbnailURL: String
});
Run Code Online (Sandbox Code Playgroud)
然后我有这个方法,只返回IssueMongoDB集合中的所有实例.
function issues(request, response) {
response.setHeader('Content-Type', 'text/json');
Issue.find().sort('date').exec(function(error, items) {
if (error) {
response.send(403, {"status": "error", "error:": exception});
}
else {
response.send(200, {"issues": items});
}
});
}
Run Code Online (Sandbox Code Playgroud)
我已经通过实验得到了这一点,现在我想测试它,但我遇到了一个问题.如何在不设置MongoDB连接的情况下进行测试,我知道我可以设置所有这些内容,但这是一个集成测试.我想编写单元测试来测试以下内容:
date字段排序我很想知道如何重构我现有的代码以使其更具单元可测试性.我尝试过创建第二个被调用的函数,接受response和Item架构对象作为参数,但感觉不对.有谁有更好的建议?
给出一个简单的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)