Jestjs jest异步测试-expect.assertion似乎是全局的
我有以下单元测试:Jestjs jest异步测试-expect.assertion似乎是全局的,jestjs,Jestjs,我有以下单元测试: var { Mockgoose } = require("mockgoose"); var mongoose = require("mongoose"); var Transaction = require("./transaction"); var mockgoose = new Mockgoose(mongoose); describe("transaction", function() { afterEach(function() { return mo
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)
Expected one assertion to be called but received two assertion calls.
43 |
44 | test("category should match one of the predefined categories", function() {
> 45 | expect.assertions(1);
| ^
46 | return mockgoose.prepareStorage().then(function() {
47 | mongoose.connect("mongodb://foobar/baz");
48 | return mongoose.connection.on("connected", function() {
不是每个测试都应该有自己的断言和期望吗?我在代码中发现,当我混合使用“异步”和“同步”测试时,会出现问题,这两种测试都测试异步功能 我使用jest expect()以“同步方式”测试了一个异步函数。解决/拒绝导致问题的API。必须以异步等待方式重写测试。这就解决了问题
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')
}
})
我也有类似的问题。在我的例子中,我的一个测试没有返回从expect函数创建的承诺。所以在几次测试之后,它统计了两个断言,因为它们都在同一次测试中完成了。我不确定你的代码片段是否如此。你找到问题的答案了吗?我现在面临着同样的问题……我认为答案是“是的
expect.assertions
确实是全球性的”,我也遇到了这个问题。要修复它,您需要找出哪个异步调用没有等待。也许值得制作一个简单的复制品,开个玩笑。