2015-06-16 15 views
15

Próbuję uzyskać testów jednostkowych napisany na maszynie przy użyciu Jasmine skompilować. Z następujących w moim pliku jednostka testu, Resharper skłania mnie z linkiem do importowania typy z jasmine.d.ts.Testy jednostkowe używając jaśminu i maszynopis

/// <reference path="sut.ts" /> 
/// <reference path="../../../scripts/typings/jasmine/jasmine.d.ts" /> 

describe("Person FullName", function() { 
    var person; 

    BeforeEach(function() { 
     person = new Person(); 
     person.setFirstName("Joe"); 
     person.setLastName("Smith"); 
    }); 

    It("should concatenate first and last names", function() { 
     Expect(person.getFullName()).toBe("Joe, Smith"); 
    }); 
}); 

więc klikam na link i kończy się z następujących (faktycznie resharper tylko prefiksem funkcję opisać, więc ręcznie prefiksem drugiego Jasmine nazywa "Jasmine."):

/// <reference path="sut.ts" /> 
/// <reference path="../../../scripts/typings/jasmine/jasmine.d.ts" /> 
import Jasmine = require("../../../Scripts/typings/jasmine/jasmine"); 

Jasmine.describe("Person FullName", function() { 
    var person; 

    Jasmine.BeforeEach(function() { 
     person = new Person(); 
     person.setFirstName("Joe"); 
     person.setLastName("Smith"); 
    }); 

    Jasmine.It("should concatenate first and last names", function() { 
     Jasmine.Expect(person.getFullName()).toBe("Joe, Smith"); 
    }); 
}); 

Jednak instrukcja importu ma czerwoną linię z komunikatem o błędzie "Nie można rozwiązać modułu zewnętrznego ../..//scripts/typings/jasmine/jasmine." Moduł nie może być aliasowany do typu nie-modułowego "

Każdy pomysł, co powoduje ten błąd? Sprawdziłem, że opcja "System modułowy" jest ustawiona na AMD w moich ustawieniach budowania projektu. Sprawdziłem również, że moduł jaśminu jest zdefiniowany w jasmine.d.ts. Pobrałem ten plik z witryny DefinitelyTyped.

declare module jasmine { 
    ... 
} 
+1

es6: 'import Jasmine from 'path/here';'. es5: 'var Jasmine = require ('path/here');'. Użyj 'beforeEach',' 'expect' it' i zamiast' 'It' BeforeEach' i' Expect'. – marcel

+0

Dzięki za odpowiedź. Pomyślałem w Maszynopisie, że poniższe jest poprawne? import Jasmine = require ("..."). Choć może nie tak to daje tak wiele błędów kompilacji ... – aw1975

Odpowiedz

3

włączenia tego do pliku html jaśmin, ...

<script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine.js"></script> 

... lub zainstalować pakiet npm jaśmin:

npm install --save-dev jasmine 

gdy używasz drugi sposób (jaśmin jako moduł) należy go zaimportować:

var jasmine = require('jasmine'); 

lub

import jasmine from 'jasmine'; 

następnie zmienić inny kod:

jasmine.describe("Person FullName", function() { 
    var person; 

    jasmine.beforeEach(function() { 
     person = new Person(); 
     person.setFirstName("Joe"); 
     person.setLastName("Smith"); 
    }); 

    jasmine.it("should concatenate first and last names", function() { 
     jasmine.expect(person.getFullName()).toBe("Joe, Smith"); 
    }); 
}); 

Osobiście wolałbym pierwszy sposób bez użycia modułu jaśmin npm. (Nie testowałem moduł jeszcze)

6

dla mnie zrobił, co następuje:

Install typowania

npm install typings --global 

Następnie dodać do typowania w jaśminu

typings install dt~jasmine --save --global 
6

Put to w górnej części pliku spec maszynopis:

/// <reference path="../../node_modules/@types/jasmine/index.d.ts" /> 
let Jasmine = require('jasmine'); 

Musisz zainstalować następujące moduły Jasmine za to do pracy:

$ npm install jasmine-core jasmine @types/jasmine jasmine-ts --save-dev 

Gdy to zrobisz, IDE (takie jak WebStorm) rozpozna Jasmine i jej funkcji, takich jak opisać(), to() i expect() .. Więc nie musisz poprzedzać ich "Jasmine". Możesz także uruchamiać pliki spec z wiersza poleceń za pomocą modułu jaśmin-ts. Zainstalować te narzędzia wiersza poleceń globalnie:

$ npm install -g jasmine jasmine-ts 

Następnie należy skonfigurować „jaśmin” Moduł wiersza poleceń, tak że Jasmine może znaleźć swój plik konfiguracyjny.Następnie powinieneś być w stanie uruchomić jaśmin-ts i Twój plik spec powinien działać dobrze z wiersza poleceń:

./node_modules/.bin/jasmine-ts src/something.spec.ts 

.. i można skonfigurować IDE uruchomić go tak, jak dobrze, że działa i debugowania sposób powinien również działać (działa dla mnie).

Pisząc swoje testy w ten sposób, można uruchomić testową specyfikację Jasmine po stronie serwera bez karmy, lub uruchomić go w przeglądarce internetowej za pomocą karmy. Ten sam kod maszynopisu.

0

Z jakiegoś powodu ten nigdy nie został prawidłowo odpowiedział, oczywiście wszystko się zmieniło, ale nie nowoczesny odpowiedź istnieje tutaj, ja przyszedłem tutaj przez google, bo jestem leniwy i google fragmenty czasem.

Jeśli napotkasz ten problem, upewnij się, że masz @typings/jasmine zainstalowane jako devDependency, a twój tsConfig zawiera typy w załącznikach, np.

"include": ["typings/**/*.d.ts"] 
+1

nie jest to '@ typy/jasmine'? –

3

Oto (moim zdaniem) najlepszym sposobem na przetestowanie ts-node aplikację jako z 2018 roku:

npm install --save-dev jasmine @types/jasmine ts-node 

W package.json:

{ 
    "scripts": { 
    "test": "ts-node node_modules/jasmine/bin/jasmine" 
    } 
} 

w plikach wyspecjalizoway:

import "jasmine"; 
import something from "../src/something"; 

describe("something",() => { 
    it("should work",() => { 
     expect(something.works()).toBe(true); 
    }); 
}); 

Aby uruchomić testy:

npm test 

ten użyje lokalnie zainstalowane wersje ts-node i jasmine. Jest to lepsze rozwiązanie niż w przypadku wersji zainstalowanych globalnie, ponieważ w przypadku wersji lokalnych możesz mieć pewność, że wszyscy używają tej samej wersji.

Uwaga: jeśli masz aplikację zamiast aplikacji węzła, należy prawdopodobnie uruchomić swoje testy stosując karmę zamiast Jasmine CLI.

0

Jeśli masz problemy z importu, użyj tsconfig-paths

npm i ts-node tsconfig-paths types/jasmine jasmine --save-dev 

Run maszynopis obsługą jaśmin:

ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine.js 

upewnić się, że jaśmin wyszuka .ts pliki:

"spec_files": [ 
    "**/*[sS]pec.ts" 
], 
"helpers": [ 
    "helpers/**/*.ts" 
], 

Aby przetestować swoje skrypty, możesz również potrzebować wielozadaniowości, jeśli używasz ich w swoim projekcie. Utwórz plik pomocnika z wymaganym importowaniem, np. helpers/global/polifill.ts

import 'core-js';