如何将laika测试从测试成功插入更改为测试失败插入?

时间:2014-08-19 02:45:01

标签: meteor laika

我已经从客户端更新了允许和拒绝规则。没有插入,更新或删除应该在客户端工作。之前这个测试(下面列出)通过了,因为它测试了客户端是否可以插入到集合中。现在我想将其切换为test以确保仅在客户端无法插入集合时才通过测试。

这是怎么做到的?

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

1 个答案:

答案 0 :(得分: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的方案,以查看是否返回预期结果