Utilisation des instructions conditionnelles dans les tests de Jasmin

J'ai deux fonctions que je veux tester; une qui ne fonctionne que dans "les navigateurs modernes" l'autre qui ne fonctionne que dans les "vieux" navigateurs.

Je suis en utilisant le Jasmin de mon framework de test et de Karma pour exécuter mes tests. Le Karma va lancer de nombreux navigateurs dans lequel tous les tests sont exécutés.

Mon problème est que les tests de TOUS mes fonctions dans TOUS les navigateurs mener quelques tests à l'échec. Par exemple, le test d'une fonction qui doit s'effectuer uniquement dans les navigateurs modernes échoue lorsqu'il est testé avec IE8.

Code de test:

function getStuffFromSmartBrowser() {
    return 'foo';
}

function getStuffFromNotSoSmartBrowser() {
    return 'bar';
}

if ('intelligence' in browser) {
    getStuffFromSmartBrowser();
} else {
    getStuffFromNotSoSmartBrowser();
}

D'origine code de test:

describe("A suite", function () {
    it("for smart browsers", function () {
        expect(getStuffFromSmartBrowser()).toEqual('foo');
    });
});

describe("A suite", function () {
    it("for not so smart browsers", function () {
        expect(getStuffFromNotSoSmartBrowser()).toEqual('bar');
    });
});

Dans ces cas de test, un test échouera dans un type de navigateurs alors que les autres test échouera dans l'autre type de navigateurs.

Alternative de code de test:

describe("A suite", function () {
    if ('intelligence' in browser) {
        it("for smart browsers", function () {
            expect(getStuffFromSmartBrowser()).toEqual('foo');
        });
    } else {
        it("for not so smart browsers", function () {
            expect(getStuffFromNotSoSmartBrowser()).toEqual('bar');
        });
    }
});

L'alternative du code de test à exécuter parfaitement bien dans tous les navigateurs testés.

Questions:

Un - il Est de bonne pratique d'utiliser des instructions conditionnelles dans les tests?

B - Si non, quelle serait une meilleure approche?

Il est mauvais d'avoir des instructions conditionnelles dans votre test. La ramification dans un test est habituellement considéré comme une odeur de code. Vous êtes mieux de faire valoir quelque chose comme browser == LegacyBrowser || realTestCondition. Ce court-circuit si le test ne devrait pas fonctionner sur un navigateur existant.

OriginalL'auteur redrum | 2014-03-21