Nano Hash - криптовалюты, майнинг, программирование

Тестовое покрытие автономных (UMD) модулей Browserify

Я использую автономный вариант браузера в следующих задачах gulp для создания UMD-модуль:

gulp.task("bundle-source", function () {
  var b = browserify({
    standalone : 'inversify',
    entries: __dirname + "/build/source/inversify.js",
    debug: true
  });

Автономный вариант оборачивает код библиотеки следующим кодом, чтобы гарантировать, что его можно загрузить как модуль узла, модуль AMD или глобальный:

 !function(n) {
    if ("object" == typeof exports && "undefined" != typeof module) module.exports = n();
    else if ("function" == typeof define && define.amd) define([], n);
    else {
        var e;
        e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, e.inversify = n()
    }
}(function() {
    return function n(e, t, i) {
        function r(u, p) {
            if (!t[u]) {
                if (!e[u]) {
                    var s = "function" == typeof require && require;
                    if (!p && s) return s(u, !0);
                    if (o) return o(u, !0);
                    var c = new Error("Cannot find module '" + u + "'");
                    throw c.code = "MODULE_NOT_FOUND", c
                }
                var f = t[u] = {
                    exports: {}
                };
                e[u][0].call(f.exports, function(n) {
                    var t = e[u][1][n];
                    return r(t ? t : n)
                }, f, f.exports, n, e, t, i)
            }
            return t[u].exports
        }
        for (var o = "function" == typeof require && require, u = 0; u < i.length; u++) r(i[u]);
        return r
    }({

    // The rest of the library code ...

Я использую Стамбул, чтобы попытаться достичь 100% покрытия тестами. Моя проблема в том, что некоторые части фрагмента кода UMD не тестируются. Например, я не использую AMD, поэтому строки, подобные приведенным ниже, никогда не выполняются:

\\ ...
else if ("function" == typeof define && define.amd) define([], n);
\\ ...

or

\\ ...
if (!e[u]) {
  var s = "function" == typeof require && require;
  if (!p && s) return s(u, !0);
  if (o) return o(u, !0);
  var c = new Error("Cannot find module '" + u + "'");
  throw c.code = "MODULE_NOT_FOUND", c
}
\\ ...

Это мешает мне достичь 100% покрытия тестами. Вы знаете, как я могу обойти эту проблему?

Спасибо!


  • Действительно ли полезно пытаться покрыть шаблон браузера? 09.10.2015
  • Ну, это для проекта с открытым исходным кодом, и возможность отображать значок 100% тестового покрытия побудит некоторых людей доверять проекту, и я считаю, что это что-то действительно ценное. 09.10.2015
  • На мой взгляд, это глупая метрика, поскольку все сводится к тому, насколько пользователи доверяют вам в реализации хороших тестов. Если они готовы доверять вам на основе значка, возможно, они готовы доверить вам покрытие важных вещей и не беспокоиться о чем-то незначительном, например, обертке UMD. 09.10.2015

Ответы:


1

Я предлагаю вам изучить реализацию игнорирования функций в Стамбуле. . На этой странице конкретно обсуждается игнорирование оболочек UMD, хотя в случае браузера вам, возможно, придется проделать дополнительную работу, чтобы выполнить это, например, создать пакет без standalone и реализовать оболочку UMD самостоятельно (используя ForbesLindesay/umd или иначе).

09.10.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..