0

我对 javascript 测试完全陌生,我正在尝试了解如何处理接触数据库的测试方法

例如,如果数据库中有与查询匹配的任何文档,我有此方法返回 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() {

    });

  });
});

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

4

1 回答 1

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

  });
});
于 2015-02-26T08:03:40.267 回答