Cómo probar un método de meteorito con práctico meteorito: mocha

Tengo una pesadilla escribiendo pruebas unitarias para meteoritos. Hay demasiados artículos antiguos y obsoletos y muy pocos documentos claros y relevantes para que pueda resolver lo que realmente necesito hacer para que esto funcione.

Me encuentro con un problema tras otro y realmente espero que alguien pueda mostrarme cómo escribirían una prueba para uno de mis métodos para que yo pueda ver lo que han hecho y aplicar ingeniería inversa para el resto de mis métodos.

Aquí hay un método para el que me gustaría escribir una prueba:

Meteor.methods({
  'client.new':( clientDetails ) => {
    check( clientDetails, {
      name: String,
      numberTeamMembers: String
    });

    clientDetails.teamMembers = [];

    if(!Meteor.userId() || !Roles.userIsInRole(Meteor.userId(), 'administrator')) {
      throw new Meteor.Error('500', 'You are not authorised to do this.');
    }

    if(Clients.findOne({ name: clientDetails.name})) {
      throw new Meteor.Error('500', 'This client name already exists!');
    };

    return Clients.insert(clientDetails);
  },
});

Hasta ahora tengo lo siguiente:

import { Meteor } from 'meteor/meteor';
import { expect, be } from 'meteor/practicalmeteor:chai';
import { describe, it, before } from 'meteor/practicalmeteor:mocha';
import { resetDatabase } from 'meteor/xolvio:cleaner';
import { Random } from 'meteor/random';

import { Clients } from '/imports/api/clients/clients.js';

import '/imports/api/clients/server/methods.js';

describe('Client Methods in API', function() {
  before(function() {
    resetDatabase();
  });

  it('can create a Client', function(){
    let clientName = "Microsoft",
        numberTeamMembers = "5",
        data = {
          name: clientName,
          numberTeamMembers: numberTeamMembers
        };

    let userId = Accounts.createUser({username: "admin", email: "[email protected]", password: "password"});
    Meteor.users.update({ _id: userId }, { $set: { roles: [ 'administrator' ] }});

    let method = Meteor.server.method_handlers['client.new'];

    method.apply(userId, [data]);


    let client = Clients.findOne();

    expect(Clients.find().count()).to.equal(1);
    expect(client.name).to.equal(clientName);
    expect(client.numberTeamMembers).to.equal(numberTeamMembers);
  });
});

Los errores que arroja la prueba anterior son, en primer lugar, me dice queMeteor.userId can only be invoked in method calls. Use this.userId in publish functions. lo cual es irrelevante porque este es un método que estoy probando. En segundo lugar, el método arroja el error ('No está autorizado para hacer esto') por lo que no reconoce el Meteor.userId () o el hecho de que el usuario está en el rol de 'administrador'.

Si alguien pudiera mostrarme cómo probarían ese método, ¡realmente lo agradecería!

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta