4

我有以下模型:

var mongoose = require("mongoose");
var categories = require("../constants/categories");

var transactionSchema = mongoose.Schema({
  category: {
    type: String,
    required: [true, "Category is required."],
    validate: {
      validator: function(v) {
        return (
          categories
            .map(function(category) {
              return category.name;
            })
            .indexOf(v) > -1
        );
      },
      message: "{VALUE} is not a valid category."
    }
  },
  amount: { type: Number, required: [true, "Amount is required"] },
  comment: String,
  tags: Array,
  currency: String
});

var Transaction = mongoose.model("Transaction", transactionSchema);
module.exports = Transaction;

并对此模型进行单元测试:

var { Mockgoose } = require("mockgoose");
var mongoose = require("mongoose");
var Transaction = require("./transaction");

var mockgoose = new Mockgoose(mongoose);

describe("transaction", function() {
  afterEach(function() {
    return mockgoose.helper.reset();
  });

  afterAll(function() {
    const { connections } = mongoose;
    const { childProcess } = mockgoose.mongodHelper.mongoBin;
    // kill mongod
    childProcess.kill();
    // close all connections
    for (const con of connections) {
      return con.close();
    }
    return mongoose.disconnect();
  });

  test("category should match one of the predefined categories", function() {
    expect.assertions(1);
    return mockgoose.prepareStorage().then(function() {
      mongoose.connect("mongodb://foobar/baz");
      return mongoose.connection.on("connected", function() {
        var mockTransaction = new Transaction({
          category: "dsawdsfawfsaf",
          amount: 25,
          comment: "Gas money, Petrol.",
          tags: ["Gas", "Car", "Transport"],
          currency: "EUR"
        });
        return mockTransaction.save(function(err, savedTransaction) {
          expect(err.errors.category.properties.message).toBe(
            "{VALUE} is not a valid category."
          );
        });
      });
    });
  });
});

运行jest --detectOpenHandles打印出以下内容:

Jest 检测到以下 1 个可能阻止 Jest 退出的打开句柄:

● 承诺

  25 | });
  26 | 
> 27 | var Transaction = mongoose.model("Transaction", transactionSchema);
     |                            ^
  28 | module.exports = Transaction;
  29 | 

  at Function.init (node_modules/mongoose/lib/model.js:970:16)
  at Mongoose.Object.<anonymous>.Mongoose.model (node_modules/mongoose/lib/index.js:396:11)
  at Object.<anonymous> (models/transaction.js:27:28)
  at Object.<anonymous> (models/transaction.test.js:3:19)

为什么会发生这种情况,我该如何解决?

4

0 回答 0