gpt4 book ai didi

unit-testing - 我如何将 should 与 mocha 和 mongoose 一起使用?

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:00 26 4
gpt4 key购买 nike

当我运行测试时,我在 save() 方法中不断收到错误。

var User = require('../../models/user')
, should = require('should');

describe('User', function(){
describe('#save()', function(){
it('should save without error', function(done){
var user = new User({
username : 'User1'
, email : 'user1@example.com'
, password : 'foo'
});
user.save(function(err, user){
if (err) throw err;

it('should have a username', function(done){
user.should.have.property('username', 'User1');
done();
});
});
})
})

})

这里是错误:

$ mocha test/unit/user.js



✖ 1 of 1 test failed:

1) User #save() should save without error:
Error: timeout of 2000ms exceeded
at Object.<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:1
61:14)
at Timer.list.ontimeout (timers.js:101:19)

最佳答案

您可以嵌套描述但不能嵌套测试。每个测试都应该是独立的,因此当您查看结果时,您可以看到失败的地方——保存或没有用户名属性。例如,在您上面的代码中,由于没有 done(),因此无法通过“应无错误保存”测试。这也是上面代码超时的原因:mocha 找不到用于“应该保存无误”测试的 done()。

不过,能够嵌套描述非常强大。在每个描述中,您可以有一个 before、beforeEach、after 和 afterEach 语句。有了这些,您就可以实现上面尝试的嵌套。如果您想阅读这些声明,请参阅 mocha 文档以获取更多信息。

我写你想要达到的目标的方式如下:

var User = require('../../models/user')
, should = require('should')
// this allows you to access fakeUser from each test
, fakeUser;

describe('User', function(){
beforeEach(function(done){
fakeUser = {
username : 'User1'
, email : 'user1@example.com'
, password : 'foo'
}
// this cleans out your database before each test
User.remove(done);
});

describe('#save()', function(){
var user;
// you can use beforeEach in each nested describe
beforeEach(function(done){
user = new User(fakeUser);
done();
}

// you are testing for errors when checking for properties
// no need for explicit save test
it('should have username property', function(done){
user.save(function(err, user){
// dont do this: if (err) throw err; - use a test
should.not.exist(err);
user.should.have.property('username', 'User1');
done();
});
});

// now try a negative test
it('should not save if username is not present', function(done){
user.username = '';
user.save(function(err, user){
should.exist(err);
should.not.exist(user.username);
done();
});
});
});
});

关于unit-testing - 我如何将 should 与 mocha 和 mongoose 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13320564/

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