我已经更新了客户端的允许和拒绝规则。任何插入、更新或删除都不应在客户端工作。以前,这个测试(下面列出)通过是因为它测试了客户端是否可以插入到集合中。现在,我想切换到测试,确保只有当客户端无法插入集合时,测试才会通过。
这是怎么做的?
//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'});
});
});发布于 2014-08-19 09:27:44
你可能走错路了。测试看看插入是否按预期被拒绝,实际上是测试已经测试过的Meteor核心。换句话说,您应该测试为insert属性返回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,以查看是否返回预期的结果
https://stackoverflow.com/questions/25374952
复制相似问题