плагин karma-coverage работает не так как ожидал

245
03 июля 2017, 20:52

Начну с кода:

// karma.config.js
module.exports = function(config) {
    config.set({
        browsers: ['Chrome'],
        frameworks: ['jasmine'],
        files: [
            './src/**/*.js',
            './tests/**/*spec.js'
        ],
        reporters: ['progress', 'coverage'],
        preprocessors: {
            'src/**/*.js': ['coverage']
        },
        coverageReporter: {
            type : 'html',
            dir : 'coverage/'
        }
    });
};

Мой проект из 3 файлов и одного теста:

// ./src/functions.js
function sum (a, b) {
    return a + b;
}
function sub (a, b) {
    return a - b;
}
function mul (a, b) {
    return a * b;
}
function div (a, b) {
    return a / b;
}
// ./src/formuls.js
function f1 (a, b, c) {
    return c - div(sum(a, b), sub(a, b));
}
function f2 (a, b, c) {
    return c + mul(a, b);
}
// ./src/index.js
/*var a = 10;
var b = 6;
var c = 3;
console.log(f1(a, b, c) + f2(a, b, c));
*/
// мои тесты
// ./tests/formuls.spec.js
describe("formuls unit tests", function () {
  it("f1", function () {
    expect(f1(2, 1, 3)).toBe(0);
  });
  it("f2", function () {
    expect(f2(2, 1, 3)).toBe(5);
  });
});

Т.е. тесты написаны только для модуля formuls.js а для модуля functions.js их нет. но! Если мы запустим тесты и откроем результат плагина coverage, то увидим, что проект покрыт тестами на 100%. Но это же не так.

Если я правильно понял, этот плагин смотрит какие функции были вызваны. т.е. по сути функции sum, sub, mul, div были вызваны. Но они были вызваны не для тестирования, а как (не знаю как правильно описать) "вторичные". т.е. функцию которую мы тестируем, вызывает другую функцию, на которую тоже надо написать тесты (но тестов нет).

И если посмотрите на файл index.js, то он закоменчен. Если его раскомментировать и вообще удалить все тесты, то получается что плагин karma-coverage опять выдаст 100%. Потому что все функции были вызваны, но они то были вызваны не в виде тестов, а только потому что index.js дал старт, и по цепочке пошло все выполняться.

Что делать при такой ситуации?

READ ALSO
Как передать массив из php в javascript

Как передать массив из php в javascript

Получил массив из базы данныхНужно обработать его в javascript

374
не добавлять елемент в список если такой уже есть

не добавлять елемент в список если такой уже есть

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

222
Вложенные store в React flux

Вложенные store в React flux

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

238
Заполнение textarea полей из дочернего окна - jQuery

Заполнение textarea полей из дочернего окна - jQuery

Здравствуйте друзья, есть окно (родительское) и в этом окне есть 3 текстовых поля

207