我有一个猫鼬模型:
var mongoose = require("mongoose");
var transactionSchema = mongoose.Schema({
category: { type: String, required: [true, "Category is required."] },
amount: Number,
comment: String,
tags: Array,
currency: String
});
var Transaction = mongoose.model("Transaction", transactionSchema);
module.exports = Transaction;
Run Code Online (Sandbox Code Playgroud)
并使用mockgoose和进行简单的单元测试jest:
var { Mockgoose } = require("mockgoose");
var mongoose = require("mongoose");
var Transaction = require("./transaction");
var mockgoose = new Mockgoose(mongoose);
describe("transaction", function() {
afterEach(function() {
mockgoose.helper.reset().then(() => {
done();
});
});
it("category is required", function() {
mockgoose.prepareStorage().then(() => {
mongoose.connect("mongodb://foobar/baz"); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Mockgoose进行测试.每当我打电话.save或.create模特时,承诺都无法解决.我能够使用.find并且.findOne没有任何问题.我不确定我是否设置了错误的东西,或者我是否误解了应该如何使用Mockgoose.
我的测试设置为:
测试/ mockgoose.js
const mongoose = require('mongoose');
const { Mockgoose } = require('mockgoose');
const mockgoose = new Mockgoose(mongoose);
mockgoose.helper.setDbVersion('3.2.1');
mongoose.Promise = global.Promise;
module.exports = {
mockgoose,
mongoose
};
Run Code Online (Sandbox Code Playgroud)
model.test.js
const { mongoose, mockgoose } = require('../test/mockgoose');
let Model = require('../model.js');
let conn;
describe('something', function() {
before(() => {
return mockgoose.prepareStorage().then(() => {
mongoose.connect('mongodb://127.0.0.1:27017/testingDB');
return new Promise(resolve => {
mongoose.connection.once('connected', () => {
conn = mongoose.connection;
Model = Model(conn);
// we pass …Run Code Online (Sandbox Code Playgroud) 我有一个节点应用程序,可以访问使用 mocha 和 mockgoose 测试的 mongodb 抛出的猫鼬。我最近搬到了 mockgoose 7.0.5。我按照 github 上的入门指南将我的 mocha 超时时间提高到 2 分钟。
这是我在测试中的前功能:
import mongoose from 'mongoose';
var Mockgoose = require('mockgoose').Mockgoose;
[...]
const mockgoose = new Mockgoose(mongoose);
before(function(done) {
try {
console.log('BEFORE prepareStorage');
mockgoose.prepareStorage().then(() => {
console.log('IN prepareStorage');
mongoose.connect('mongodb://example.com/TestingDB', function(err) {
done(err);
});
}).catch((error) => {
done(error);
});
} catch(e) {
done(e);
}
console.log('AFTER prepareStorage');
});
beforeEach(function(done) {
mockgoose.helper.reset();
done();
});
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,在这mockgoose.prepareStorage一步中,mockgoose 似乎正在下载一些东西。
BEFORE prepareStorage
AFTER prepareStorage
Completed: 0.1 % (0.2mb / 234.3mb
Run Code Online (Sandbox Code Playgroud)
我想这与请求的 2 …
我正在尝试为我的Mongoose模型创建一些测试,我无法弄清楚如何让Jest/Mockgoose测试通过我创建的用于检索的速记查询/聚合管道(参见下面的第一个代码块)来自一个集合的随机文档,该文档未在另一个集合中引用.
activitySchema.query.getUnused = function() {
return Activity.aggregate()
.lookup({
from: 'userActivity',
localField: '_id',
foreignField: 'activity',
as: 'matched_docs',
})
.match({ matched_docs: { $eq: [] } })
.sample(1)
.project({ matched_docs: 0, __v: 0 })
.exec()
}
Run Code Online (Sandbox Code Playgroud)
开玩笑测试
describe('Activity methods', () => {
test('Activity unused query executes', (done) => {
function createActivity() {
return Activity
.create({ activity: 'running' })
.then(activity => {
console.log('Activity is generated')
return Promise.resolve(true)
})
}
async function retrieveActivity() {
await createActivity()
Activity
.find()
.getUnused()
.then(unused => {
console.log(unused);
expect(unused).toHaveLength(1)
done() …Run Code Online (Sandbox Code Playgroud) 我使用chai-http对我的REST api进行了正常的单元测试.它失败并出现以下错误
warn: double callback!
error: { SyntaxError: Unexpected token { in JSON at position 58
at Object.parse (native)
at IncomingMessage.<anonymous> (E:\projects\node_modules\chai-http\node_modules\superagent\lib\node\parsers\json.js:8:35)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickCallback (internal/process/next_tick.js:104:9)
rawResponse: '{"books":[],"count":0,"page":1,"pages":0,"pageSize":10}{"books":[],"count":0,"page":1,"pages":0,"pageSize":10}',
statusCode: 200,
response: undefined }
Run Code Online (Sandbox Code Playgroud)
如您所见,rawResponse由于测试失败,重复.我调试了代码,控制器代码只调用一次,输出正确.但无法理解为什么会出现这种错误.
以下是测试代码
// some code to mock mongoose with mockgoose
....
....
let server = require('../../../server');
let should = chai.should();
chai.use(chaiHttp);
describe.only('Books', () => {
describe('/GET book', () => {
it('it should GET all …Run Code Online (Sandbox Code Playgroud) 在简单的单元测试中使用mockgoose非常简单.但是,对于如何在验收或集成测试中使用mockgoose或其他模拟解决方案,我有点模糊.
给出一个简单的express/MongoDB应用程序,如下所示:
/*app.js*/
const express = require('express')
const app = express()
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var greetingSchema = mongoose.Schema({
greeting: String
});
var Greeting = mongoose.model('Greeting', greetingSchema);
app.get('/', function (req, res) {
Greeting.find({greeting: 'Hello World!'}, function (err, greeting){
res.send(greeting);
});
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
})
Run Code Online (Sandbox Code Playgroud)
和这样的简单集成测试:
/*test.js*/
const app = require('app.js');
const request = require('supertest');
it('sends "Hello World!" on the response body', (done) => {
request(app)
.get('/')
.expect(200, 'Hello World!', done);
}); …Run Code Online (Sandbox Code Playgroud)