首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在测试运行完成后,jest mockgoose jest没有退出一秒钟。

在测试运行完成后,jest mockgoose jest没有退出一秒钟。
EN

Stack Overflow用户
提问于 2018-06-29 14:38:05
回答 2查看 9.8K关注 0票数 5

我有只猫鼬模型:

代码语言:javascript
复制
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;

以及使用mockgoosejest进行的简单单元测试

代码语言:javascript
复制
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");
      mongoose.connection.on("connected", () => {
        var mockTransaction = new Transaction({
          category: "Transportation",
          amount: 25,
          comment: "Gas money, Petrol.",
          tags: ["Gas", "Car", "Transport"],
          currency: "EUR"
        });
        mockTransaction.save(function(err, savedTransaction) {
          if (err) return console.error(err);
          expect(savedTransaction).toEqual(mockTransaction);
        });
      });
    });
  });
});

现在,当我运行我的测试时,我会收到以下两个警告:

(节点:2199) UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝id: 1):ReferenceError: done未定义(节点:2199) DEP0018 DeprecationWarning:未处理的承诺拒绝被取消。在未来,承诺不处理的拒绝将使用非零退出代码终止Node.js进程。

然后单元测试通过,然后我得到以下错误消息:

在测试运行完成后,Jest没有退出一秒钟。 这通常意味着在测试中没有停止异步操作。考虑使用--detectOpenHandles运行Jest来解决此问题。

一旦得到正确的结果,如何终止测试?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-29 14:55:39

这个错误的意思正是它所说的,done没有被定义,但是它被使用了。当承诺被使用时,它是不需要的。开玩笑支持承诺,承诺应该从块中返回,这样才能正确地处理:

代码语言:javascript
复制
afterEach(() => mockgoose.helper.reset());

如果打开句柄(如在this question中)出现问题,则可以显式地断开与以下命令的连接:

代码语言:javascript
复制
afterAll(() => mongoose.disconnect());
票数 8
EN

Stack Overflow用户

发布于 2018-06-29 15:02:59

最初的测试有一些问题。

第一个是@estus指出的,在用jest进行测试时需要返回承诺。导致问题标题错误的第二个问题是测试后未正确关闭db连接造成的。

这是最终代码,所有内容都按预期运行:

代码语言:javascript
复制
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();
  });

  it("category is required", function() {
    expect.assertions(1);
    return mockgoose.prepareStorage().then(function() {
      mongoose.connect("mongodb://foobar/baz");
      return mongoose.connection.on("connected", function() {
        var mockTransaction = new Transaction({
          amount: 25,
          comment: "Gas money, Petrol.",
          tags: ["Gas", "Car", "Transport"],
          currency: "EUR"
        });
        return mockTransaction.save(function(err, savedTransaction) {
          console.log(err.errors.category.properties.message);
          expect(err.errors.category.properties.message).toBe(
            "Category is required."
          );
        });
      });
    });
  });
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51104155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档