Angular 2 rc5,服务单元测试问题

标签 angular jasmine

@Injectable()
export class Service1 {
    constructor( private s2 : Service2 ) { 
        console.log( s2.name );
     }
}

@Injectable()
export class Service2 {
    public name: string = 'Hi';
}


//------------Test-------------

let service1: MockService1;  // MockService1 extends Service1
let service2: MockService2;  // MockService2 extends Service2

beforeEach(() => {
    TestBed.configureTestingModule({
        providers: [
            { provide: Service1, useClass: MockService1 },
            { provide: Service2, useClass: MockService2 }
        ]
    })
});  

beforeEach(inject( [ Service1 , Service2 ], ( s1: MokcService1 , s2: MockService2  ) => { 
    service1 = s1;
    service2 = s2; 
}));

it('should be defined ', () => {
    expect( service1 ).toBeDefined(); 
    expect( service2 ).toBeDefined();
});

我得到了

TypeError: undefined is not an object (evaluating 's2.name')

因为 Service2 未定义。

相同的代码早先使用了 addProviders 和 provide

beforeEach(() => {
    addProviders([
        provide(Service1, {useClass: MockService1 } ),
        provide(Service2, {useClass: MockService2 } ),
    ]);
});         

删除 console.log( s2.name ) 后,这 2 个测试通过了

有什么想法吗?

最佳答案

在构造函数中注入(inject)服务时使用@Inject,

示例:

constructor( @Inject(Service2) private s2 : Service2 ) { 
    console.log( s2.name );
}

关于Angular 2 rc5,服务单元测试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41484380/

相关文章:

arrays - Angular 为 2 的 Immutable.js

javascript - 引用错误: Can't find variable: $controller

javascript - 无法让 $.ajax.mostRecentCall 与 jasmine 2.0.2 一起使用

javascript - 我如何使用 jasmine 监视 getter 属性?

javascript - 如何获取 jasmine-node 中错误的堆栈跟踪?

javascript - Protractor:Jasmine-Reporter (jasmine2) 正在生成奇怪的 Junit XML 报告

javascript - Angular 2 中的 Leaflet + Google - 瓷砖顺序错误

javascript - 在 angular2 中是否可以在全局位置导入 CommonModule 和 RouterModule 以提高应用程序速度

angular - 获取将由 router.navigate 生成的 URL

css - Angular 2 使用 ngClass 更改类