gpt4 book ai didi

node.js - 在 Mocha 中使用 Supertest 测试 Node.js Express API 和 MongoDB

转载 作者:可可西里 更新时间:2023-11-01 09:55:49 25 4
gpt4 key购买 nike

我已经在这个网站和网络上搜索了一段时间,但我找不到解决这个问题的方法。我正在尝试测试我的 API 的 REST 功能,但 PUT 测试似乎从未起作用。每次在 mocha 中运行测试时,我都会收到错误“Uncaught assertion error: expected [] to equal {objectData}”,其中 objectData 是我尝试发布的对象(名为 couponTwo)的 json 表示形式。

我感觉问题出在 beforeEach 函数上,因为它会在每次测试前清除数据库,而许多其他测试需要执行此操作才能正确运行。这是测试代码:

var config = require('../config/config');
var mongoose = require('mongoose');
var should = require('should');
var request = require('supertest');
var Coupon = require('../models/coupon');
var url = require('../config/config').test.url;

process.env.NODE_ENV = 'test';

beforeEach(function (done) {

function clearCollections() {
for (var collection in mongoose.connection.collections) {
mongoose.connection.collections[collection].remove(function() {});
}
return done();
}

if (mongoose.connection.readyState === 0) {
mongoose.connect(config.test.db, function (err) {
if (err) throw err;
return clearCollections();
});
} else {
return clearCollections();
}
});

afterEach(function (done) {
mongoose.disconnect();
return done();
});

这是应该在 PUT 之后测试对象是否存在于数据库中的代码:

describe('#post', function () {
it('should return a coupon object after post', function (done) {
request(url).post('/coupons')
.set('Content-Type', 'application/json')
.send(couponTwo)

request(url).get('/coupons').end(function (err, res) {
if (err) throw err;
console.log(res.body);
res.body.should.eql(couponTwo);
done();
})
})
})

如果这个问题的答案很明显并且我遗漏了一些基本的东西,我深表歉意,但我遇到了障碍。感谢您的帮助!

最佳答案

我认为这是因为请求调用的异步性质。您需要将第二个请求包装在一个回调中,这样它只会在第一个请求完成并且您的测试对象被放入数据库时​​执行。

此外,.eql(couponTwo) 在您的情况下无论如何都会失败,因为您的响应是一个包含所放置对象的数组,并且您直接将其与该对象进行比较。如果您想确保它是数组中的唯一元素,请使用 .eql([couponTwo]),或者只使用 .containEql(couponTwo)

试试这个:

request(url).post('/coupons')
.set('Content-Type', 'application/json')
.send(couponTwo)
.end(function () {
request(url).get('/coupons').end(function (err, res) {
if (err) throw err;
console.log(res.body);
res.body.should.containEql(couponTwo);
done();
});
});

关于node.js - 在 Mocha 中使用 Supertest 测试 Node.js Express API 和 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19418600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com