Как открыть внешнюю библиотеку в браузере, чтобы Jest-тесты могли ее увидеть? - PullRequest
1 голос
/ 20 марта 2019

Я пишу математическую библиотеку для использования в браузере и использую Jest для запуска на ней модульных тестов (которые, как я понимаю, больше ориентированы на Node).Я решил большинство проблем, расширив JS Math, но для усреднения (среднего) и стандартного отклонения я работаю с https://mathjs.org's математической библиотекой.Все это прекрасно работает в браузере, но Jest не может увидеть библиотеку mathjs, и я не уверен, как это исправить.

Это конкретный раздел кода, который не работает в Jest (CalRunWebMath.js):

//Extend Math to calculate coefficient of variation:
Math.cv = function(numericArray){
    var std = math.std(numericArray);
    var mean = math.mean(numericArray);
    //this is how I originally did it:
    //return math.std(numericArray)/math.mean(numericArray);
    return std/mean;
}
try {
    module.exports.cv = exports = Math.cv;
}
catch (e) {}

//and this is a snippet of the internal tests that works just fine in the browser, but not in Jest
var data1 = [10.4,20.3,30.2,40.1];
console.log(Math.cv(data1)); //0.5061720808904743

Это HTML-код, управляющий им:

<script src='js/math.js'></script>
<script src='js/CalRunWebMath.js'></script>

Это тестовый файл Jest:

const crwm = require('./CalRunWebMath.js');
const math = require('./math.js');
const cv = crwm.cv;

test('Calculates coefficient of variation', ()=> {
    var data1 = [10.4,20.3,30.2,40.1];
    expect(cv(data1)).toBe(0.5061720808904743);
});

Полученная ошибка: ReferenceError: математика не определена (я пропустил другие проходные тесты из приведенного выше фрагмента):

 FAIL  ./CalRunWebMath.test.js
  √ Calculates slope of two coordinates (6ms)
  × Calculates coefficient of variation (4ms)
  √ Calculates Y-intercept of two coordinates (1ms)
  √ Calculates the mean of an array of decimals (48ms)

  ● Calculates coefficient of variation

    ReferenceError: math is not defined

      43 | Math.cv = function(numericArray){
      44 |      //console.log(math.std);
    > 45 |      var std = math.std(numericArray);
         |                ^
      46 |      var mean = math.mean(numericArray);
      47 |      //return math.std(numericArray)/math.mean(numericArray);
      48 |      return std/mean;

      at math (js/CalRunWebMath.js:45:12)
      at Object.cv (js/CalRunWebMath.test.js:14:9)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 3 passed, 4 total

Как я могу открыть математический модуль вбраузер, чтобы Джест мог видеть это в тестах?

1 Ответ

2 голосов
/ 20 марта 2019

Объект глобального пространства имен в Node доступен как global.

Вы можете добавить math к объекту глобального пространства имен следующим образом:

global.math = require('./math.js');
const { cv } = require('./CalRunWebMath.js');

test('Calculates coefficient of variation', () => {
  var data1 = [10.4, 20.3, 30.2, 40.1];
  expect(cv(data1)).toBe(0.5061720808904743);  // Success!
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...