作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当我运行测试时,我在 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/
我是一名优秀的程序员,十分优秀!