0

我已经更新了来自客户端的允许和拒绝规则。任何插入、更新或删除都不应该在客户端工作。以前这个测试(如下所列)通过了,因为它测试了客户端是否可以插入到集合中。现在我想将其切换到测试以确保测试仅在客户端无法插入集合时通过。

这是怎么做到的?

//tests/tests.js
var assert = require('assert');

suite('Donate', function() {
  test('in the server', function(done, server) {
    server.eval(function() {
      Donate.insert({fname: 'George'});
      var docs = Donate.find().fetch();
      emit('docs', docs);
    });

    server.once('docs', function(docs) {
      assert.equal(docs.length, 1);
      done();
    });
  });
});

  test('using both client and the server', function(done, server, client) {
    server.eval(function() {
      Donate.find().observe({
        added: addedNewDonate
      });

      function addedNewDonate(donate) {
        emit('donate', donate);
      }
    }).once('donate', function(donate) {
      assert.equal(donate.fname, 'George');
      done();
    });

    client.eval(function() {
      Donate.insert({fname: 'George'});
    });
  });
4

1 回答 1

0

您可能会以错误的方式处理此问题。测试是否按预期拒绝插入实际上是测试已经测试过的 Meteor 核心。换句话说,您应该测试为 insert deny 属性返回 false 的方法。如果您所做的只是:

    Donate.deny({
      insert: function(){
        return false;
      }
    )};

那么你不需要对此进行测试,因为 Meteor 核心已经过足够的测试,你知道这会起作用。

另一方面,如果你有类似的东西

    function complexDenyFunction(){
      //perform complex actions 
      //if all complex conditions are satisfied 
      //return true
      //else return false
      return result;
    }

    Donate.deny({
      insert: complexDenyFunction
    });

然后您要做的是创建complexDenyFunction将返回的场景truefalse测试complexDenyFunction是否返回预期结果

于 2014-08-19T09:27:44.373 回答