首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jest异步测试- expect.assertion似乎是全局的

jest异步测试- expect.assertion似乎是全局的
EN

Stack Overflow用户
提问于 2018-06-29 16:01:01
回答 1查看 899关注 0票数 4

我有以下单元测试:

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

  test("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) {
          expect(err.errors.category.properties.message).toBe(
            "Category is required."
          );
        });
      });
    });
  });

  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."
          );
        });
      });
    });
  });
});

现在,如果我只运行其中一个测试,那么所有的测试都会通过,但是当我同时运行这两个测试时,我会得到以下错误:

事务>类别应匹配预定义的类别之一 expect.assertions(1)期望调用一个断言,但接收到两个断言调用。43 \{\foobar/baz(函数())(函数())、函数[mockgoose.prepareStorage()](.then)(函数())

难道不是每个测试都有自己的断言和期望吗?

EN

回答 1

Stack Overflow用户

发布于 2019-12-10 17:15:58

我发现在我的代码中,当我有“异步”和“同步”两个测试异步功能的混合测试时,问题就出现了。

我以“同步方式”测试了一个异步函数,使用jest ()..resolves/rejects,这导致了这个问题。必须以异步等待方式重写测试。解决了这个问题。

代码语言:javascript
复制
describe('asyncSum()', () => {
  test('"broken" sync test', () => {
    expect(asyncSum(2, 2)).resolves.toEqual(4); // This line causes the issue incorrect assertion count
  })

  test('async test resolves example', async () => {
    expect.assertions(1);

    const sum = await asyncSum(2, 2);
    expect(sum).toEqual(4);
  })

  test('async test reject example', async () => {
    expect.assertions(1);

    let error;
    try {
      await asyncSum(2);
    } catch (err) {
      error = err;
    }

    expect(error.message).toEqual('Missing 2nd parameter')
  }
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51105594

复制
相关文章

相似问题

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