Когда я запускаю тест 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) '.