Javascript IFs (сонар ложно-положительный?) - PullRequest
0 голосов
/ 11 февраля 2019

Я только что обнаружил одну вводящую в заблуждение проблему в SonarQube, у нас есть следующий код (JS)

{…}
function test(searchQuery, role) {

console.log("inputs: " +searchQuery + ", " + role );
    if (!searchQuery && role) {
        console.log("first");
    }
    if (searchQuery && !role) {
        console.log("sec");
    }
    if (searchQuery && role) {
        console.log("3");
    }
    console.log("END");
}
{…}

И Sonarqube (6.7.4) помечены последними. Если в качестве проблемы с комментарием ее следует исправить наtrue

с протестированными значениями было получено:

inputs: aaa, fff
test.txt.html:14 3
test.txt.html:16 END
test.txt.html:6 inputs: null, fff
test.txt.html:8 first
test.txt.html:16 END
test.txt.html:6 inputs: null, null
test.txt.html:16 END

Iя не эксперт по javascript, просто нашел интересным, у кого-нибудь есть идея, if there is any reason why the last if should be everytime true?Потому что я так не думаю, рег.тестирование данных.

Если вы поместите возврат в первые два IF, которые будут иметь место, то код будет продолжен в двух случаях: - если установлены обе переменные, или если обе переменные равны NULL, но if (null, null) должен вернуть undefined, не так ли?

Спасибо за любые разъяснения

1 Ответ

0 голосов
/ 12 февраля 2019

Было бы легче помочь вам, если бы вы давали код, который фактически анализируется, и точную проблему, которую вы получаете в SonarQube.Я не смог воспроизвести проблему с кодом, который вы разместили, но я мог воспроизвести один с return утверждениями в каждом блоке if (на основе примечания в конце вашего сообщения).

function test(searchQuery, role) {
    if (!searchQuery && role) {
        return;
    }
    if (searchQuery && !role) {
        return;
    }
    if (searchQuery && role) {
        return;
    }
}

SonarQube затем выделяет role в условии третьего оператора if и поднимает следующую проблему: Измените этот код так, чтобы это выражение не всегда оценивалось как true.

КогдаsearchQuery верно и role неверно, условие второго оператора if истинно и выполняется второй оператор return.Это означает, что role не может быть ложным, если searchQuery верно в условии третьего утверждения if.Другими словами, role можно удалить из условия третьего оператора if, не влияя на поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...