我需要撤消加载mongoose的文档中的更改以进行测试。
IE中。我尝试设置错误的类型,当然,失败。然后我尝试别的东西,但我在第一次错误时失败了。例如:
// here I load the user
before(function(done) {
user = loadUserSomehow();
done();
})
it ('should validate email', function(done) {
// now I try one field wrong
user.email = 'This is not a valid email';
user.save(function(err) {
err.message.should.equal.'Invalid email'; // to simplify
// I would get 'invalid email' error here.
});
});
it ('should validate type', function(done) {
// now I try another field wrong
user.type = 'This type does not exist';
user.save(function(err) {
err.message.should.equal.'Invalid user type'; // THIS fails
// instead of invalid type, I still get an invalid email message
});
});
为了避免在每次测试之前重新加载文档,我如何撤消更改"在一个mongoose文件上?
答案 0 :(得分:0)
Mongoose不支持"撤消"那。但是,您可以有多个选项:
手动处理撤消。如果按顺序运行所有测试,则可以编辑测试,如下所示:
it ('should validate email', function(done) {
var oldValue = user.email;
user.email = 'This is not a valid email';
user.save(function(err) {
err.message.should.equal.'Invalid email';
user.email = oldValue;
done(null);
});
});
请注意,这不是正确的"撤消",因为Mongoose仍会将user.email
视为已修改(如果您运行user.isModified('email')
,则应获得真值。)
在每次测试之前,请继续重新加载user
。由于这不是一个生产环境,而只是一个测试用例,因此优化不应该太重要。只需将before
方法的名称更改为beforeEach
答案 1 :(得分:0)
您可以将创建的文档指向一些变量(const),然后在测试后为每个变量运行deleteMany
const someDocument = undefined;
// it should ... your testing code
// point "new Document()" to someDocument
afterEach(async () => {
Document.deleteMany({_id: someDocument._id});
})
您还可以连接到其他数据库进行测试,并在完成后将所有内容发送至转储