Использование sinon.spy для тестирования глобальных функций (таких как parseInt), вызывающих ошибку при запуске Karma - PullRequest
0 голосов
/ 10 октября 2018

У меня возникли проблемы со слежкой за тем, как часто в моей функции запускается parseInt.Это PoC для интеграции Typescript моей компании

Я следовал двум отдельным руководствам по тестированию Sinon, но ни в одном из них не упоминалось о работе с функциями из пространства имен global.

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

Наведение надфункция spy (sinon.spy(global, "parseInt")) также предполагает, что parseInt определенно является частью глобального объекта / пространства имен в TypeScript

Я получаю эту ошибку, которая ссылается на строку, которая не существует вфайл теста:

PhantomJS 2.1.1 (Windows 8 0.0.0) ERROR
  {
    "message": "SyntaxError: Unexpected token '>'\nat scripts/fortress/typescript/tests/dependencies/func.spec.ts:119:0",
    "str": "SyntaxError: Unexpected token '>'\nat scripts/fortress/typescript/tests/dependencies/func.spec.ts:119:0"
  }

Удаление всех строк, кроме той, которая устанавливает spy, делает тестовый прогон в порядке.


PoC тест:

    /**
     * @description Takes two parameters and determines if they are of the same type.
     * @param {string} property A Date string (example: 'Date(1231231311231)')
     * @returns {number} A number indicating the time from epoch.
     */
export class Functions { 
    getDateNumberFromJsonPropertyString(property : string) : number {
        return parseInt(property.substring(property.indexOf("(") + 1, property.indexOf(")")));
    }
}


    describe("GetdateNumberFromJsonPropertyString", function() {
        it("should call parseInt once", function() {
            let parseIntSpy = sinon.spy(global, "parseInt"); // <-- Breaks here

            func.getDateNumberFromJsonPropertyString("(1)");    

            parseIntSpy.restore(); 
            sinon.assert.calledOnce(parseIntSpy);
        }); 
    }); 

Карма скафолдинга:

/*
    KarmaJS defintion file for all required unit tests.
*/

let webpackConfig = require('./webpack.config');

module.exports = function (config) {
    config.set({ 
        basePath: '',
        frameworks: ['mocha', 'chai', 'sinon'],
        files: [
            "scripts/fortress/typescript/tests/**/*.ts"
        ], 
        exclude: [
            "node_modules/"
        ],
        preprocessors: {
            "scripts/fortress/typescript/tests/**/*.ts" : ["webpack"]
        },
        webpack: {
            mode: "development",
            module: webpackConfig.module,
            resolve: webpackConfig.resolve
        },
        reporters: ["progress"],
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true,
        browsers: ["PhantomJS"],
        singleRun: false,
        concurrency: Infinity
    })
}

1 Ответ

0 голосов
/ 10 октября 2018

Я думаю, что вы восстанавливаете шпиона перед попыткой утверждения:

sinon.assert.calledOnce(parseIntSpy);
parseIntSpy.restore(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...