我遇到了错误 无法解析AddPassModal的所有参数:(?,?)。
我已经尝试过一些在堆栈溢出中发现的解决方案,但是似乎都没有用。 这是用于添加基于ng2-semantic-ui Component的 https://edcarroll.github.io/ng2-semantic-ui/#/modules/modal
我可以使代码正常工作。但是他在使用辅助类时测试失败。
这是ts文件中的代码
export class PassesComponent implements OnInit {
constructor(public modal:SuiModal<IAddPassModalContext, void, void>,
public gu:GetUsersService, public formatDate:DateService, public policyService:PolicyService) {
}
}
export class AddPassModal extends ComponentModalConfig<IAddPassModalContext, void, void> {
constructor(title:string, question:string) {
super(PassesComponent, { title, question });
this.isClosable = false;
this.transitionDuration = 200;
this.size = size;
}
}
这是给我一个错误的测试文件 无法解析AddPassModal的所有参数:(?,?)。
interface IAddPassModalContext {
title:string;
question:string;
}
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
HttpClientModule,
FormsModule,
ReactiveFormsModule,
SuiModule
],
declarations: [ PassesComponent ,
GuestComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [AddPassModal]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PassesComponent);
component = fixture.componentInstance;
//mocAdd = new MocAddPassModal("test","test",ModalSize.Small);
fixture.detectChanges();
});
在GH上的一些示例中,我已经尝试过了。
interface IAddPassModalContext {
title:string;
question:string;
}
class MocAddPassModal extends ComponentModalConfig<IAddPassModalContext, void, void> {
constructor(title:string = "", question:string = "") {
super(PassesComponent, { title, question });
}
}
describe('PassesComponent', () => {
let component: PassesComponent;
let fixture: ComponentFixture<PassesComponent>;
let mocAdd: MocAddPassModal = new MocAddPassModal("test","test");
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
HttpClientModule,
FormsModule,
ReactiveFormsModule,
SuiModule
],
declarations: [ PassesComponent ,
GuestComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [AddPassModal, { provide: PassesComponent, useObject:mocAdd}]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PassesComponent);
component = fixture.componentInstance;
mocAdd = new MocAddPassModal("test","test");
fixture.detectChanges();
});
afterEach(() => {
mocAdd = null;
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
不起作用。 请帮忙。 谢谢
答案 0 :(得分:0)
在您的TestBed中,您将提供“ AddPassModal”,但是TestBed不知道如何构造它,因为它的构造参数是(字符串,字符串,ModalSize)。没有提供任何内容或未分配注入令牌。如果要通过DI构造AddPassModal,则可能需要研究类似this的东西。
您可能只想在测试中提供AddPassModal服务的实例:
providers: [ {provide: AddPassModal, useObject:new MocAddPassModal("test","test",ModalSize.Small)}]
答案 1 :(得分:0)
向@PeterB大声喊叫。他让我走了正确的路。
所以这可能会帮助其他人。 1st我添加了几个Mocs
class MocAddPassModal extends ComponentModalConfig<IAddPassModalContext, void, void> {
constructor(title:string = "", question:string = "") {
super(PassesComponent, { title, question });
}
}
class MocSuiModal{
constructor(title:string = "", question:string = "") {
}
}
第二次,我像这样添加了提供商
providers: [{ provide: SuiModal, useObject:new MocSuiModal("test","test")},
{ provide: AddPassModal, useObject:new MocAddPassModal("test","test")}]
比起我得到一个上下文为空的错误,因为componet.modal(modal)为空 要解决我的问题
fixture = TestBed.createComponent(PassesComponent);
component = fixture.componentInstance;
component.modal = new SuiModal<IAddPassModalContext, void, void>(new ModalControls(undefined,undefined),contextAddPass);
fixture.detectChanges();
它有效。 现在只需要使我的测试达到70%,每个人都会很高兴。