Как протестировать серверную функцию в Meteor, не включая ее в глобальное пространство имен

В моем файле на стороне сервера у меня определены две функции, для которых я хочу написать контрольные примеры, которые находятся в файле в каталоге tests.

~ PRJ_DIR / сервер /file1.coffee

calcSha1Hash = (params) ->
    .... logic...
anotherFunc = () ->
    ..somelogic..
    x = calcSha1Hash(params)

~ PRJ_DIR / тесты / сервер /file1.coffee

MochaWeb?.testOnly () ->
  describe.only("Hash generation.  ", () ->
    it(" calcSha1Hash returns Hash.", (dn) ->
      dataDict = {email: 'johndoe@gmail.com'}
      hash = calcSha1Hash (dataDict)
      chai.assert.isDefined(hash)
      dn()
    )
  )

Как можно вызвать серверную функцию func(calcSha1Hash) в моем тестовом примере в Meteor

1 ответ

Решение

Если для этого нет специфичного для метеора способа, вы можете реализовать решение из раздела Как тестировать частные функции в JavaScript

Вам нужно будет иметь одну глобальную переменную (что-то вроде TestAPI). Затем добавьте к нему свои функции внутри замыкания, чтобы вы могли получить к ним доступ из любого места.

Вот пример из статьи:

var myModule = (function() {

  function foo() {
    // private function `foo` inside closure
    return "foo"
  }

  var api = {
    bar: function() {
      // public function `bar` returned from closure
      return "bar"
    }
  }

  /* test-code */
  api._foo = foo
  /* end-test-code */

  return api
}())

У кого-то может быть что-то лучше, но это только начало.

Другие вопросы по тегам