Это - возможное применение, или потребуйте сценария Perl, не выполняя его операторы?

Хорошо, я, в конце концов, узнал, что babel сам по себе не делает полипол. В том числе скрипт <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.15/browser-polyfill.min.js"></script> решил эту проблему для меня.

17
задан brian d foy 27 October 2008 в 20:14
поделиться

3 ответа

Другой общий прием для сценариев поблочного тестирования должен перенести тело их кода в блок 'вызывающей стороны':

#!/usr/bin/perl

use strict;
use warnings;

unless (caller) {
    # startup code
}

sub foo { ... }

, Когда выполнено из командной строки, крона, сценария удара, и т.д., это обычно работает. Однако, если Вы загружаете его из другой программы Perl, "если (вызывающая сторона) {...}" Код не работает. Затем в Вашей тестовой программе, объявите пространство имен (так как сценарий, вероятно, выполняет код в пакете main::), и сделайте сценарий.

#!/usr/bin/perl

package Tests::Script;   # avoid the Test:: namespace to avoid conflicts
                         # with testing modules
use strict;
use warnings;

do 'some_script' or die "Cannot (do 'some_script'): $!";

# write your tests

'делают' является более эффективным, чем оценка и довольно чистым для этого.

Другой прием для сценариев тестирования должен использовать , Ожидают . Это более чисто, но также более твердо использовать, и это не позволит Вам переопределить что-либо в рамках сценария, если необходимо копировать что-нибудь.

17
ответ дан 30 November 2019 в 11:08
поделиться

Принятие Вас не имеет никаких проблем безопасности, переносит его в sub {...} И оценка это:

use File::Slurp "read_file";
eval "package Script; sub {" . read_file("script") . "}";

is(Script::foo(), "foo");

(заботящийся, что оценка не в пределах никакого lexicals, который был бы закрыт сценарием).

17
ответ дан 30 November 2019 в 11:08
поделиться

Ahh, старое, "как делают меня модульный тест программа" вопрос. Самый простой прием должен поместить это в Вашу программу, прежде чем это начнет делать вещи:

return 1 unless $0 eq __FILE__;

__FILE__ текущий исходный файл. $0 название запущенной программы. Если они - то же, Ваш код выполняется как программа. Если они отличаются, это загружается как библиотека.

Этого достаточно, чтобы позволить Вам запустить поблочное тестирование подпрограммы в Вашей программе.

require "some/program";
...and test...

Следующий шаг должен переместить весь код вне подпрограммы в main, затем можно сделать это:

main() if $0 eq __FILE__;

и теперь можно протестировать основной () точно так же, как любая другая подпрограмма.

После того как это сделало Вас, может начать собираться выгонять подпрограммы программы с квартиры в их собственные реальные библиотеки.

10
ответ дан 30 November 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: