如何使用 velocity/jasmine 对收集方法进行单元测试

How to unit test collection methods with velocity/jasmine

我是 javascript 测试的新手,我正试图掌握如何处理涉及数据库的测试方法

例如,我有这个方法 returns 如果数据库中有任何文档匹配查询

则为真
Payments = 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() {

    });

  });
});

这样的测试甚至应该触及数据库吗?非常感谢任何建议

除非您手动将数据输入 Mongo(或在 Meteor 之外),否则您不需要测试数据库。

您应该测试的是代码中的执行路径。

因此对于上述情况,hasAnyPayments 是一个查找所有用户付款的单元,如果超过 0,则 returns 为真。因此您的测试看起来像这样:

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);
    });

  });
});