Модульному тесту Jasmine не нравится метод array.includes () при использовании в Chutzpah / Visual Studio 2017 в C # ASP.Net для тестирования JavaScript в видах бритвы - PullRequest
0 голосов
/ 24 марта 2019

Когда я запускаю тест Jasmine или QUnit для функции JavaScript (в проекте C # ASP.Net), которая использует метод array.include () (вызывается для экземпляра массива), я получаю сообщение об ошибке: ' Undefined не является конструктором при оценке arrayName.includes (dataToFind) '. Я использую Chutzpah для запуска тестов внутри Visual Studio Explorer. Когда я пишу подпрограмму для массива, включающего метод, а не полагаюсь на эту абстракцию, он работает, поэтому он, похоже, не любит этот метод или не знает, где его реализация. Я бы предпочел использовать этот метод, так как я прочитал, что рекомендуется использовать его (для современных веб-браузеров).

У меня есть обходной путь для написания самой процедуры включения, и я посмотрел, нужно ли мне включать ссылку на класс массива (как это, вероятно, метод расширения?), Но я не могу найти как бы ты это сделал. Это также может быть зависимость, которая требует регистрации (хотя я новичок в Jasmine / QUnit, так что не знаю, куда это пойдет). Я обновил настройки компиляции для Jasmine в файле настроек chutzpah.json.

//Jasmine nor QUnit like this
function randomArrayOfIndexes() {
    var randNumbArray = new Array(4);
    var indexToAssign = Math.floor(Math.random() * Math.floor(4));
    randNumbArray[0] = indexToAssign;

    for (i = 1; i < randNumbArray.length; i++) {
        indexToAssign = Math.floor(Math.random() * Math.floor(4));
        //while (arrayContains(randNumbArray, indexToAssign)) {
        while (randNumbArray.includes(indexToAssign)) {
            indexToAssign = Math.floor(Math.random() * Math.floor(4));
        }
        randNumbArray[i] = indexToAssign;
    }

    return randNumbArray;
}

//Jasmine and QUnit do like this

unction randomArrayOfIndexes() {
    var randNumbArray = new Array(4);
    var indexToAssign = Math.floor(Math.random() * Math.floor(4));
    randNumbArray[0] = indexToAssign;

    for (i = 1; i < randNumbArray.length; i++) {
        indexToAssign = Math.floor(Math.random() * Math.floor(4));
        while (arrayContains(randNumbArray, indexToAssign)) {
        //while (randNumbArray.includes(indexToAssign)) {
            indexToAssign = Math.floor(Math.random() * Math.floor(4));
        }
        randNumbArray[i] = indexToAssign;
    }

    return randNumbArray;
}

// includes function I made myself
function arrayContains(arrayin, numberIn) {
    var i = arrayin.length;
    while (i--) { //takes one from i so highest index is accurate on first iteration
        if (arrayin[i] === numberIn) {
            return true;
        }
    }
    return false;
}

Я ожидаю, что эта подпрограмма будет выполняться в тестовой среде без необходимости писать сам метод. Я получаю сообщение об ошибке: Undefined не является конструктором при оценке arrayName.include (dataToFind) '.

...