Π£ΡΠΈΡΡΠ²Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ MyComponent
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ API Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
import MyComponent from './my.component';
import {
describe,
expect,
it,
inject,
beforeEach,
beforeEachProviders } from '@angular/core/testing';
import { TestComponentBuilder } from '@angular/compiler/testing';
Π― ΠΏΡΡΠ°ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ΅ΡΡ, Π²Π²ΠΎΠ΄Ρ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ TestComponentBuilder, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΈΠΊΡΡΡΡΡ ΡΠΈΠΏΠ° MyComponent
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
describe('MyComponent', () => {
let testComponentBuilder: TestComponentBuilder;
beforeEachProviders(() => [TestComponentBuilder]);
beforeEach(inject([TestComponentBuilder], (_testComponentBuilder: TestComponentBuilder) => {
testComponentBuilder = _testComponentBuilder;
}
));
it('should feature this or that behavior', done => {
// We create a test component fixture on runtime out from the component symbol
testComponentBuilder.createAsync(MyComponent).then(componentFixture => {
// Here we proceed to run assertions on the componentFixture
// ...
done();
})
.catch(e => done.fail(e));
});
ΠΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π΄ΠΎ RC.1 Ρ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΡ.
Error: No precompiled component MyComponent found
ΠΠ±ΡΡΠ½ΠΎ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ testComponentBuilder.createAsync(MyComponent)
, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅Ρ
ΠΌΠΎΠΈΡ
ΡΠ΅ΡΡΠ°Ρ
, ΠΎΡ
Π²Π°ΡΡΠ²Π°ΡΡΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ TestComponentBuilder
.
ΠΠ»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΠ» ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
import { setBaseTestProviders } from '@angular/core/testing';
import {
TEST_BROWSER_STATIC_PLATFORM_PROVIDERS,
TEST_BROWSER_STATIC_APPLICATION_PROVIDERS
} from '@angular/platform-browser/testing';
setBaseTestProviders(
TEST_BROWSER_STATIC_PLATFORM_PROVIDERS,
TEST_BROWSER_STATIC_APPLICATION_PROVIDERS
);
Π― Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π» ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Π² RC.1 ΠΈΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΌΠΎΠ΅ΠΉ ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ, Π½ΠΎ Π±Π΅Π·ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΠΎ RC.1 ΠΌΠΎΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ.
ΠΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ?
ΠΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. ΠΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΈΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π±ΡΠ»Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ. ΠΠΎΠ΄ΠΎΠ±Π½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π»Π°:
import { resetBaseTestProviders, setBaseTestProviders } from '@angular/core/testing';
import { BROWSER_APP_DYNAMIC_PROVIDERS } from "@angular/platform-browser-dynamic";
import {
TEST_BROWSER_STATIC_PLATFORM_PROVIDERS,
ADDITIONAL_TEST_BROWSER_PROVIDERS
} from '@angular/platform-browser/testing';
resetBaseTestProviders();
setBaseTestProviders(
TEST_BROWSER_STATIC_PLATFORM_PROVIDERS,
[
BROWSER_APP_DYNAMIC_PROVIDERS,
ADDITIONAL_TEST_BROWSER_PROVIDERS
]
);
ΠΠΈΠ½ΠΎΠ²Π°Ρ! ;)
@deeleman Π― https://github.com/juliemr/ng2-test-seed/blob/master/karma-test-shim.js : (
/*global jasmine, __karma__, window*/
Error.stackTraceLimit = Infinity;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;
__karma__.loaded = function () {
};
var distPath = '/base/.test/';
var appPath = distPath + 'app/';
function isJsFile(path) {
return path.slice(-3) == '.js';
}
function isSpecFile(path) {
return path.slice(-8) == '.spec.js';
}
function isAppFile(path) {
return isJsFile(path) && (path.substr(0, appPath.length) == appPath);
}
var allSpecFiles = Object.keys(window.__karma__.files)
.filter(isSpecFile)
.filter(isAppFile);
// Load our SystemJS configuration.
System.config({
baseURL: distPath,
});
System.import('system.config.js').then(function(e) {
// Load and configure the TestComponentBuilder.
return Promise.all([
System.import('@angular/core/testing'),
System.import('@angular/platform-browser-dynamic/testing')
]).then(function (providers) {
var testing = providers[0];
var testingBrowser = providers[1];
testing.setBaseTestProviders(
testingBrowser.TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
testingBrowser.TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS
);
});
}).then(function() {
return Promise.all(
allSpecFiles.map(function (moduleName) {
return System.import(moduleName);
}));
}).then(__karma__.start, __karma__.error);
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° ΠΈΠ·-Π·Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
Π‘ΠΎΠΎΠ±ΡΠΈΡΠ΅ ΠΎ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
Π£Π·Π½Π°ΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Π½Π°ΡΠ΅ΠΉ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΎΠ² .
_ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π±ΡΠ»ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π±ΠΎΡΠΎΠΌ._
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. ΠΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΈΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π±ΡΠ»Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ. ΠΠΎΠ΄ΠΎΠ±Π½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π»Π°:
ΠΠΈΠ½ΠΎΠ²Π°Ρ! ;)