Meteor服务器单元测试 - 访问全局对象

时间:2015-08-18 15:42:59

标签: angularjs unit-testing meteor-velocity

我在共享的lib目录中有一个文件: LIB / functional.js

它将对象F附加到全局范围:

F = (function() {
  return {
    method1: function() {}
  }
})();

在应用程序中,这工作正常,我可以通过F.method1()从任何地方,服务器和客户端访问method1。

我还在客户端上进行了单元测试:

describe('GameController', function () {
  beforeEach(module('blockchess'));

  // Get a new controller and rootscope before each test is executed
  var $controller = {};
  var $scope = {};
  beforeEach(inject(function (_$rootScope_, _$controller_) {
    $controller = _$controller_;
    $scope = _$rootScope_.$new();
  }));

  it('should have a gameId', function () {
    $controller('GameController as ctrl', {
        $scope: $scope
    });
    expect($scope.ctrl.game.gameId).toBe('1');
  });

});

该控制器使用F.method1,它工作正常。

但是当我尝试在单元测试中打电话时,在服务器中:

describe('Backfeed', function() {
  var move = {
    _id: '1'
  };

  var john = {
    reputation: 10,
    _id: '1'
  };

  var stars = 5;

  // call protoRate
  Meteor.methodMap.protoRate(john._id, move._id, stars);

  expect(john.reputation).toEqual(9.47368421052632);
})

我收到此错误:

  

ReferenceError:F未定义

     

/home/adam/apps/blockchess/server/lib/protocol.js:9:14:   ReferenceError:在Object.protoRate中未定义F.   (/home/adam/apps/blockchess/server/lib/protocol.js:9:14)at at   /home/adam/apps/blockchess/tests/jasmine/server/unit/backfeed/backfeedSpec.js:28:22

如果有帮助: 我还注意到,如果我删除包含F函数的IIFE:

F = function() {
  return {
    method1: function() {}
  }
};

我可以从服务器单元测试中访问F,因为它在应用程序中无用。

任何想法如何解决这个问题?

0 个答案:

没有答案