Étant donné un composant MyComponent
exposant une API simpliste à des fins de démonstration et important les symboles dont nous avons besoin pour effectuer les tests de composants habituels :
import MyComponent from './my.component';
import {
describe,
expect,
it,
inject,
beforeEach,
beforeEachProviders } from '@angular/core/testing';
import { TestComponentBuilder } from '@angular/compiler/testing';
J'essaie d'effectuer un test de base en injectant et en instanciant le TestComponentBuilder pour créer un composant de fixation du type MyComponent
, comme ceci :
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));
});
J'obtiens toujours la même erreur après la mise à niveau de mon code vers RC.1.
Error: No precompiled component MyComponent found
Fondamentalement, la promesse renvoyée par testComponentBuilder.createAsync(MyComponent)
n'est jamais résolue. Le problème est cohérent sur tous mes tests englobant l'utilisation de TestComponentBuilder
.
Pour mémoire, et avant d'effectuer tout test, j'ai préalablement configuré les fournisseurs de tests comme ceci :
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
);
J'ai scanné le code haut et bas pour déterminer s'il s'agit d'un bogue réel dans RC.1 ou d'un problème avec ma configuration de test, sans succès. Avant RC.1, ma configuration de test fonctionnait de manière transparente dans tous les composants de test de spécifications en particulier.
Des pointeurs?
J'ai réussi à régler ça par moi-même. Il s'avère que la configuration de mes fournisseurs de tests d'applications et de plates-formes était incorrecte. Configurer le script d'installation comme ceci a fait l'affaire :
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
]
);
Ma faute! ;)
@deeleman Je rencontre le même problème avec la configuration par défaut utilisée par ng-cli et 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);
Ce problème a été automatiquement verrouillé en raison de l'inactivité.
Veuillez déposer un nouveau problème si vous rencontrez un problème similaire ou connexe.
En savoir plus sur notre politique de verrouillage automatique des conversations .
_Cette action a été effectuée automatiquement par un bot._
Commentaire le plus utile
J'ai réussi à régler ça par moi-même. Il s'avère que la configuration de mes fournisseurs de tests d'applications et de plates-formes était incorrecte. Configurer le script d'installation comme ceci a fait l'affaire :
Ma faute! ;)