2016-10-11 33 views
6

PodsumowanieNie można korzystać z klas pomocniczych w ramach testów jednostkowych pakietu aplikacji aurelia. Wymagaj konfiguracji JS?

Korzystanie CLI Aurelia i zadania domyślne, które są włączone, nie jestem w stanie wykorzystać klas pomocniczych, które są zlokalizowane w folderze testowym w moich testów jednostkowych.

Szczegóły

Począwszy aplikacji próbki utworzonej z au nowy, mam contrived klasy pomocnika znajdujący się wewnątrz 'test/util/helper.ts':

export class Helper { 
    Property : string; 
} 

Ta klasa jest importowany przez testowym pliku/jednostkę/app.spec.ts:

import {App} from '../../src/app'; 
import {Helper} from "../util/helper"; 

describe('the app',() => { 
    it('says hello',() => { 
    let h = new Helper(); 
    h.Property = "Testing"; 
    expect(h.Property).toBe("Testing"); 
    expect(new App().message).toBe('Hello World!'); 
    }); 
}); 

podejście # 1 - Wiązanie Mam zmodyfikowany plik aurelia.json w kilku miejscach:

  • Zmień źródło kompilatora maszynopis zawierać pliki w folderze testowym

    "transpiler": { 
        "id": "typescript", 
        "displayName": "TypeScript", 
        "fileExtension": ".ts", 
        "dtsSource": [ 
        "./typings/**/*.d.ts", 
        "./custom_typings/**/*.d.ts" 
        ], 
        "source": ["src\\**\\*.ts","test\\**\\*.ts"] 
    }, 
    
  • zmodyfikować wiązkę do aplikacji wykluczyć dowolny plik z folderu testowego

    { 
        "name": "app-bundle.js", 
        "source": { 
         "include": [ 
         "[**/*.js]", 
         "**/*.{css,html}" 
         ], 
         "exclude": [ 
         "**/test/**/*" 
         ] 
        } 
        }, 
    
  • Dodaj nowy pakiet (test-util-bundle), który zawiera pliki z testu \ util Folder i wyłącza pliki w src i folderów test/jednostkowych

    { 
        "name": "test-util-bundle.js", 
        "source": { 
        "include": [ 
         "[**/*.js]" 
        ], 
        "exclude": [ 
         "**/src/**/*", 
         "**/test/unit/**/*" 
        ] 
        } 
    }, 
    

Po łączenie aplikacji z kompilacji 'au', mam trzy zestawy (app/vendor/test-util), z test- util-bundle.js z wiązki definiując klasę pomocniczą tak:

define('../test/util/helper',["require", "exports"], function (require, exports) { 
    "use strict"; 
    var Helper = (function() { 
     function Helper() { 
     } 
     return Helper; 
    }()); 
    exports.Helper = Helper; 
}); 

podejrzewam jest to główny problem, ale nie, że zna RequireJS.

Kiedy zrobić próbę uruchomienia „au” test nie powiedzie się z powodu następującego błędu:

11 10 2016 12:05:24.606:DEBUG [middleware:source-files]: Fetching C:/git/aurelia-cli-testing/test/test/util/helper 
11 10 2016 12:05:24.608:WARN [web-server]: 404: /base/test/test/util/helper 
Chrome 53.0.2785 (Windows 7 0.0.0) ERROR 
Uncaught Error: Script error for "C:/git/aurelia-cli-testing/test/test/util/helper", needed by: C:/git/aurelia-cli-testing/test/util/helper 
http://requirejs.org/docs/errors.html#scripterror 
at C:/git/aurelia-cli-testing/scripts/vendor-bundle.js:3763 

Uwaga: Działa to dobrze jeśli ja przenieść helper.ts złożyć pod drzewem src (jako gotowe here). To wszystko jest dostępne here, jeśli chcesz zobaczyć to zachowanie.

Podejście # 2 - Bez splatania klasie użytkowej

  • Zmienić karma.conf.js
let testSrc = [ 
     { pattern: project.unitTestRunner.source, included: false }, 
     { pattern: "test/util/**/*.ts", included: false }, 
     'test/aurelia-karma.js' 
    ]; 

    ... 

    preprocessors: { 
     [project.unitTestRunner.source]: [project.transpiler.id], 
     ["test/util/**/*.ts"]: [project.transpiler.id] 
    }, 

Dzięki tej modyfikacji (nie powiązanie klasie użytkowej) karma wytwarza się następujący błąd:

18 10 2016 16:56:59.151:DEBUG [middleware:source-files]: Fetching C:/git/aurelia-cli-testing/test/util/helper 
18 10 2016 16:56:59.152:WARN [web-server]: 404: /base/test/util/helper 
Chrome 53.0.2785 (Windows 7 0.0.0) ERROR 
    Uncaught Error: Script error for "C:/git/aurelia-cli-testing/test/util/helper", needed by: C:/git/aurelia-cli-testing/test/unit/app.spec.js 
    http://requirejs.org/docs/errors.html#scripterror 
    at C:/git/aurelia-cli-testing/scripts/vendor-bundle.js:3763 

Dziękuję za przeczytanie, każda pomoc będzie bardzo mile widziane!

+0

Czy używasz karmy jako swojego biegacza testowego? Jeśli tak, to czy dodałeś nową lokalizację pliku do swojej konfiguracji karmy? –

+0

Używam biegacza testu karmy. Plik karma.conf.js pozostaje oryginalnym plikiem wygenerowanym z polecenia "au new". Patrząc na plik, nie jestem do końca pewien, gdzie dodać nową lokalizację pliku. Nowy pakiet jest dodawany do pola "pliki" konfiguracji wysyłanej do karmy, jeśli o to pytasz. –

Odpowiedz

3

Dzięki członek zespołu Aurelia, niewielka modyfikacja pliku aurelia-karma.js która jest rozprowadzana z CLI aurelia rozwiązuje problem:

Funkcja normalizePath powinien być modyfikowany dołączyć ".js" w stosownych przypadkach:

function normalizePath(path) { 
    var normalized = [] 
    var parts = path 
    .split('?')[0] // cut off GET params, used by noext requirejs plugin 
    .split('/') 

    for (var i = 0; i < parts.length; i++) { 
    if (parts[i] === '.') { 
     continue 
    } 

    if (parts[i] === '..' && normalized.length && normalized[normalized.length - 1] !== '..') { 
     normalized.pop() 
     continue 
    } 

    normalized.push(parts[i]) 
    } 

    //Use case of testing source code. RequireJS doesn't add .js extension to files asked via sibling selector 
    //If normalized path doesn't include some type of extension, add the .js to it 
    if(normalized.length > 0 && normalized[normalized.length-1].indexOf('.') < 0){ 
    normalized[normalized.length-1] = normalized[normalized.length-1] + '.js'; 
    } 

    return normalized.join('/') 
} 
2

Musiałem wykonać następujące czynności: 1. zaktualizować plik aurelia-project/aurelia.json. dodaj ten

"unitTestRunnerUtils": { 
"id": "karmaUtils", 
"displayName": "Karma", 
"source": "test\\utils\\**\\*.js" }, 

Następnie w pliku karma.conf.js zaktualizowano te dwa miejsca.

let testSrc = [ { pattern: project.unitTestRunner.source, included: false }, { pattern: project.unitTestRunnerUtils.source, included: false}, 'test/aurelia-karma.js' ];

i

preprocessors: { [project.unitTestRunner.source]: [project.transpiler.id], [project.unitTestRunnerUtils.source]: [project.transpiler.id] },

A potem to działało ...

Oto przykładowy projekt na github.

https://github.com/duranmg/demo-aurelia-testing

+0

Dzięki za odpowiedź Mike ... Myślę, że przekłada się to na moje "Podejście nr 2". Czy masz próbne repozytorium, na które mogę patrzeć? –

+0

no po prostu użyłem aurelia-cli i stworzyłem nową aplikację, a następnie dodałem kod powyżej – Mike

+0

Właśnie zacząłem od zupełnie nowej aplikacji przez aurelia-cli i wykonałem te same modyfikacje co ty, jednak otrzymałem ten sam błąd co wcześniej . Czy zmodyfikowałeś plik app.spec, aby wymagał pliku w folderze utils? –