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

时间:2015-02-20 19:26:41

标签: meteor jasmine meteor-velocity

我对javascript测试完全陌生,我正在努力掌握如何处理触及数据库的测试方法

例如,如果db中有与查询匹配的文档

,我有这个方法返回true
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() {

    });

  });
});

这些测试是否应该触及数据库?任何建议都非常感谢

1 个答案:

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

  });
});