我正在更新 Angular2 RC5 的单元测试。 changelog注意到以下重大变化:
addProviders
[is deprecated], useTestBed.configureTestingModule
instead
但这似乎只有在尝试将服务包含在测试中时才会出现错误。我的单元测试用于执行以下操作的地方:
beforeEach(() => addProviders([
MyService,
MockBackend,
...
]));
现在应该配置测试模块:
TestBed.configureTestingModule({
providers: [
StoryService,
MockBackend,
...
]
});
但是现在会抛出一个错误
Service: MyService encountered a declaration exception FAILED
Error: Cannot configure the test module when the test module has already been instantiated. Make sure you are not using
inject
beforeTestBed.configureTestingModule
.
我检查过 inject
在 configureTestingModule
之前没有被调用。这不会影响任何其他组件/指令测试,它们似乎通过得很好。我如何解决此错误以使用 RC5 对服务进行单元测试?我意识到我可能不得不等到 RC5 的测试文档更新,但任何对可能解决方案的洞察力将不胜感激。
最佳答案
根据我的阅读,您只需要初始化一次测试环境。然后,您可以在每次测试前重置测试模块并配置测试模块:
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [ GridComponent ]
});
});
afterEach(() => {
TestBed.resetTestingModule();
});
前期配置为:
var testing = require('@angular/core/testing');
var browser = require('@angular/platform-browser-dynamic/testing');
try {
testing.TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platformBrowserDynamicTesting());
} catch ($error) {
console.log("test env failure" + $error);
}
通读代码后,configureTestingModule 似乎会在内部调用 resetTestingModule,但出于可读性目的,我喜欢在每个代码之后声明它。
关于unit-testing - Angular2 RC5 如何正确配置测试模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38985159/