我已经从客户端更新了允许和拒绝规则。没有插入,更新或删除应该在客户端工作。之前这个测试(下面列出)通过了,因为它测试了客户端是否可以插入到集合中。现在我想将其切换为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'});
});
});
答案 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
将返回true
和false
并测试complexDenyFunction
的方案,以查看是否返回预期结果