2017-12-31 63 views
0

Ich überlege, jest zum Testen meiner Hybridanwendung (Angular + AngularJS) zu verwenden. Ich benutze jest-preset-angular für Angular-Tests, aber ich brauche auch angular-mocks für AngularJS-Tests.Jest und hybride Angular/AngularJS-Anwendung

Das Problem ist, wenn ich beide jest-preset-angular und angular-mocks in setupJest.ts importieren, alle Tests (Winkel- und AngularJS) nicht mit Cannot read property '$injector' of null Fehler (von angular-mocks kommt).

Wenn ich nur jest-preset-angular importieren alle Angular-Tests bestanden, wenn ich nur angular-mocks importieren alle AngularJS Tests bestehen.

Wie kann ich es zusammenarbeiten lassen?

package.json:

"jest": { 
    "preset": "jest-preset-angular", 
    "setupTestFrameworkScriptFile": "<rootDir>/src/setupJest.ts" 
} 

setupJest.ts:

import 'jest-preset-angular'; 
import 'angular'; 
import 'angular-mocks'; 

const mock =() => { 
    let storage = {}; 
    return { 
     getItem: key => key in storage ? storage[key] : null, 
     setItem: (key, value) => storage[key] = value || '', 
     removeItem: key => delete storage[key], 
     clear:() => storage = {}, 
    }; 
}; 

Object.defineProperty(window, 'localStorage', {value: mock()}); 
Object.defineProperty(window, 'sessionStorage', {value: mock()}); 
Object.defineProperty(window, 'getComputedStyle', { 
    value:() => ['-webkit-appearance'] 
}); 

Antwort

0

Es stellt sich, dass die Reihenfolge Angelegenheiten aus.
Importieren angular-mocks vor jest-preset-angular behebt das Problem:

import 'angular'; 
import 'angular-mocks'; 
import 'jest-preset-angular';