2015-06-25 2 views
2

Я хотел бы знать, как объявить зависимость от модуля Npm в Meteor только в тесте.Объявить зависимость теста, используя Npm.depends

Во время тестирования пакет, я могу легко объявить зависимость НПМ в package.js, как это:

Npm.depends({ 
    ... 
    'sinon': '1.15.3' 
    ... 
}); 

Но я только использую sinon в тесте, и я хочу, чтобы сделать его явным.

Я пробовал следующее без успеха.

Package.onTest(function(api) { 
    // # 1 
    // can't do this because it is not a meteor module 
    api.use('sinon'); 

    // # 2 
    // can't because I have other production Npm dependencies 
    // and Meteor only allows one `Npm.depends` call per `package.js`. 
    // Also, not sure if nesting Npm.depends() is allowed at all. 
    Npm.depends({ 
    'sinon': '1.15.3' 
    }); 


}); 

Любые предложения?

+0

Как насчет создания метеорной обертки для синона, а затем делать api.use() в onTest? –

ответ

1

Единственный способ сделать это - обернуть синон в пакет и api.use его. Вы можете сделать следующее:

$ meteor create --package sinon 

Заменить содержимое packages/sinon со следующими:

package.js

Package.describe({ 
    summary: 'Standalone test spies, stubs and mocks for JavaScript.' 
}); 

Package.onUse(function(api) { 
    api.versionsFrom('1.0.4'); 
    api.export('sinon', 'server'); 
    api.addFiles('sinon.js'); 
    api.addFiles('post.js'); 
}); 

post.js

sinon = this.sinon; 

sinon.js

Загрузить последнюю версию от here.

И наконец, в упаковке, которую вы тестируете, вы можете добавить api.use('sinon'); в свой Package.onTest.


В качестве альтернативы, чтобы сделать свой собственный пакет, вы можете просто использовать один из вариантов общественных доступных here.

+0

Благодарим вас за подробную инструкцию. Я понимаю, что мы экспортируем переменную sinon, чтобы мы могли использовать ее вне пакета, но в чем смысл 'this.sinon' в' post.js'? –

+0

Вы часто увидите странные сценарии предварительного и пост-сценария, которые обертывают сторонний код. Это немного сложно, но в основном единственный способ разоблачить символ через пакет - объявить глобальную переменную (без 'var'). Объект 'global' внутри пакета обернут для предотвращения утечки переменных - это приятно, но приводит к некоторым нечетным обходным решениям, подобным выше. –

+0

Тогда это 'этот' сам пакет? –

Смежные вопросы