JUnit не дает информации относительно “ошибок”

tl; dr Если вы находитесь на Babel 6, вы можете использовать https://www.npmjs.com/package/babel-plugin-transform-builtin-extend

Расширение встроенных типов, таких как Array и Error, и таких никогда не поддерживалось в Babel. Это совершенно справедливо в реальной среде ES6, но есть требования, чтобы заставить его работать, что очень сложно перевести таким образом, который совместим со старыми браузерами. Он «работал» в Babel 5 в том смысле, что он не выдавал ошибку, но объекты, созданные из расширенного подкласса, не работали, как предполагалось, например:

class MyError extends Error {}

var e1 = new MyError();
var e2 = new Error();

console.log('e1', 'stack' in e1);
console.log('e2', 'stack' in e2);

приводит к

e1 false
e2 true

Пока он не выходил из строя, подкласс не получает должным образом «стек», как предполагается. Аналогично, если бы вы расширили Array, он мог бы вести себя как массив и иметь методы массива, но он не вел себя полностью как массив.

Документация Babel 5 специально называла это как

В Babel 6 классы были изменены, чтобы быть более spec-compliant в том, как обрабатывается подклассы, а побочным эффектом является то, что теперь вышеупомянутый код будет все еще не работает, но он не будет работать иначе, чем раньше. Это описано в https://phabricator.babeljs.io/T3083 , но я расскажу здесь о потенциальном решении.

Чтобы вернуть поведение подкласса Babel 5 (что помните, что все еще не правильно или рекомендуется), вы можете обернуть встроенный конструктор в свой собственный временный класс, например

function ExtendableBuiltin(cls){
    function ExtendableBuiltin(){
        cls.apply(this, arguments);
    }
    ExtendableBuiltin.prototype = Object.create(cls.prototype);
    Object.setPrototypeOf(ExtendableBuiltin, cls);

    return ExtendableBuiltin;
}

С помощью этого помощника вместо выполнения

class MyError extends Error {}

do

class MyError extends ExtendableBuiltin(Error) {}

В вашем конкретном случае, однако, вы сказали, что находитесь на узле 5.x. Узел 5 поддерживает собственные классы ES6 без пересылки. Я бы рекомендовал вам использовать их, отбросив пресет es2015 и вместо этого используя node5 , вы получите, среди прочего, родные классы. В этом контексте

class MyError extends Error {}

будет работать так, как вы ожидаете.

Для людей, не находящихся в узле 4/5 или только в Chrome, вы можете захотеть использовать что-то вроде https://www.npmjs.com/package/error . Вы также можете изучить https://www.npmjs.com/package/babel-plugin-transform-builtin-extend . Параметр approximate от этого является тем же самым поведением из Babel 5. Остерегайтесь того, что поведение не approximate определенно кратно-казенное и может не работать в 100% случаев.

16
задан Dustin 29 November 2008 в 08:15
поделиться

2 ответа

Разобрался:)

Мне нужно было добавить «форматтер» внутри блока junit.

<formatter type="plain" usefile="false" />

Что за PITA.

Дан

32
ответ дан 30 November 2019 в 16:37
поделиться

Если Вы собираетесь иметь много тестов существует два, изменяются, Вы могли бы хотеть рассмотреть:

  1. запускает все тесты вместо того, чтобы остановиться в первой ошибке
  2. , создают отчет, показывающий все результаты испытаний

, И довольно легко сделать с junitreport задачей:

<target name="test">
    <mkdir dir="target/test-results"/>
    <junit fork="true" forkmode="perBatch" haltonfailure="false"
           printsummary="true" dir="target" failureproperty="test.failed">
        <classpath>
            <path refid="class.path"/>
            <pathelement location="target/classes"/>
            <pathelement location="target/test-classes"/>
        </classpath>
        <formatter type="brief" usefile="false" />
        <formatter type="xml" />
        <batchtest todir="target/test-results">
            <fileset dir="target/test-classes" includes="**/*Test.class"/>
        </batchtest>
    </junit>

    <mkdir dir="target/test-report"/>
    <junitreport todir="target/test-report">
        <fileset dir="target/test-results">
            <include name="TEST-*.xml"/>
        </fileset>
        <report format="frames" todir="target/test-report"/>
    </junitreport>

    <fail if="test.failed"/>
</target>
6
ответ дан 30 November 2019 в 16:37
поделиться
Другие вопросы по тегам:

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