Javascript Meteor中Jasmine的单元测试注册用户方法

Javascript Meteor中Jasmine的单元测试注册用户方法,javascript,unit-testing,meteor,jasmine,user-accounts,Javascript,Unit Testing,Meteor,Jasmine,User Accounts,嘿,我试图对一个方法进行单元测试,但是当我使用spyOn Accounts.createUser时,我得到了一个错误“error:createUser()方法不存在”,然而当我使用spyOn Meteor.user时,我没有任何问题,这是我目前为止得到的结果 server/methods/user.js Meteor.methods({ 'registerUser' : function (options) { if(Meteor.user()) thr

嘿,我试图对一个方法进行单元测试,但是当我使用spyOn Accounts.createUser时,我得到了一个错误“error:createUser()方法不存在”,然而当我使用spyOn Meteor.user时,我没有任何问题,这是我目前为止得到的结果

server/methods/user.js

Meteor.methods({
    'registerUser' : function (options) {

        if(Meteor.user())
        throw new Meteor.Error(403, "Account has already been registered, log out to create a new account");

        if(options.password.length < 8)
        throw new Meteor.Error(403, "Password must have at least 8 characters");

        var id = Accounts.createUser(options);
        if(options.type === "b") Roles.addUsersToRoles(id, 'user-b');
        else Roles.addUsersToRoles(id, 'user-c');

        return 0;
    }
});

Accounts.validateNewUser(function (user) {
  if (user.emails[0].address && user.emails[0].address.length >= 5)
    return true;
  throw new Meteor.Error(403, "Invalid email address");
});

Accounts.onCreateUser(function(options, user) {
    if(options.type === "b"){
        var key = RegKey.findOne({ key: options.key, valid: true });
        if(key) RegKey.update({ _id: key._id },{ valid: false });
        else throw new Meteor.Error(403, "Invalid Code");
    }
  return user;
});

测试Jasmine单元测试在Meteor上下文之外运行。这意味着您的测试代码是快速的、隔离的,并且只测试您希望它们测试的东西。但应用程序中预期Meteor会出现的代码无法正常运行

Jasmine通过创建“存根”来修复它

beforeEach(function () {
  MeteorStubs.install();
});

afterEach(function () {
  MeteorStubs.uninstall();
});
对于服务器单元测试,这是自动完成的。如果您想编写在浏览器中运行的单元测试,您需要自己为客户机测试做这件事

如果我们看看他们的模拟服务示例 我们可以看到缺少“createUser()”

stubFactories.Accounts = function () {
var Meteor = stubFactories.Meteor();

 return {
   emailTemplates: { enrollAccount: emptyFn },
   config: emptyFn,
   urls: {},
   registerLoginHandler: emptyFn,
   onCreateUser: emptyFn,
   loginServiceConfiguration: new Meteor.Collection('loginserviceconfiguration'),
   validateNewUser: emptyFn
 };
})

与Meteor.user不同,它是定义的

stubFactories.Accounts = function () {
var Meteor = stubFactories.Meteor();

 return {
   emailTemplates: { enrollAccount: emptyFn },
   config: emptyFn,
   urls: {},
   registerLoginHandler: emptyFn,
   onCreateUser: emptyFn,
   loginServiceConfiguration: new Meteor.Collection('loginserviceconfiguration'),
   validateNewUser: emptyFn
 };