我正在更新Angular2 RC5的单元测试。变化量g注意到以下突然变化:
不建议使用
addProviders,而是使用TestBed.configureTestingModule
但是,这似乎只有在尝试在测试中包含服务时才会出现错误。其中,我的单元测试用于执行以下操作:
beforeEach(() => addProviders([
MyService,
MockBackend,
...
]));它现在应该配置测试模块:
TestBed.configureTestingModule({
providers: [
StoryService,
MockBackend,
...
]
});但现在这会引发一个错误
服务: MyService遇到一个声明异常失败 错误:当测试模块已经实例化时,无法配置测试模块。确保在使用
inject之前没有使用TestBed.configureTestingModule。
我已经检查过inject没有在configureTestingModule之前被调用。这不影响任何其他组件/指令测试,它们似乎通过了很好的测试。如何解决使用RC5测试服务的单元错误?我意识到,我可能不得不等到RC5的测试文档更新之后,但对可能的解决方案的任何洞察都将不胜感激。
发布于 2016-09-09 11:09:31
根据我所读到的,您只需要插入一次测试环境。然后,您可以在每次测试之前重置测试模块并配置测试模块:
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,但为了便于阅读,我喜欢在每个代码之后声明它。
发布于 2016-08-27 18:40:01
我有一个类似的问题,并通过重置测试环境来修复它:
import {MyService} from './my.service';
import {inject, TestBed} from '@angular/core/testing/test_bed';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting }
from '@angular/platform-browser-dynamic/testing';
describe('MyService', () => {
beforeEach(() => {
// Must reset the test environment before initializing it.
TestBed.resetTestEnvironment();
TestBed
.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting())
.configureTestingModule({
providers: [
MyService
]
});
});
it('should do something', inject([MyService], (s: MyService) => {
let r = s.getResult();
expect(r.length).toBe(2);
}));
});说到角2,我是个菜鸟,所以我欢迎更有见识的人的纠正。似乎不必在每个测试中重置和重新初始化测试环境。不幸的是,这是我唯一能让它发挥作用的方法。
发布于 2016-08-17 10:29:49
将TestBed.configureTestingModule插入beforeEach中,如下所示:
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
StoryService,
MockBackend,
...
]
});
});https://stackoverflow.com/questions/38985159
复制相似问题