我对javascript测试完全陌生,我正在努力掌握如何处理触及数据库的测试方法
例如,如果db中有与查询匹配的文档
,我有这个方法返回truePayments = new Mongo.Collection('payments');
_.extend(Payments, {
hasAnyPayments: function(userId) {
var payments = Payments.find({ userId: userId });
return payments.count() > 0;
}
});
到目前为止,我只编写了我认为正确的结构,但我很遗憾
describe('Payments', function() {
describe('#hasAnyPayments', function() {
it('should return true when user has any payments', function() {
});
});
});
这些测试是否应该触及数据库?任何建议都非常感谢
答案 0 :(得分:4)
除非您手动(或在Meteor之外)手动将数据输入Mongo,否则您无需测试数据库。
您应该测试的是代码中的执行路径。
因此,对于上述情况,hasAnyPayments
是一个查找所有用户付款的单位,如果超过0则返回true。所以您的测试看起来像这样:
describe('Payments', function() {
describe('#hasAnyPayments', function() {
it('should return true when user has any payments', function() {
// SETUP
Payments.find = function() { return 1; } // stub to return a positive value
// EXECUTE
var actualValue = Payments.hasAnyPayments(); // you don't really care about the suer
// VERIFY
expect(actualValue).toBe(true);
});
});
});