【发布时间】:2020-11-20 03:19:12
【问题描述】:
我在 NX 工作区中执行简单的单元测试时遇到问题。我正在尝试做的是 1)配置 TestBed 和 2)注入服务。但是,即使我使用脚手架虚拟服务,测试仍然失败,因为注入的服务据说是undefined
test.service.ts
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class TestService {
constructor() { }
}
test.service.spec.ts
import { TestBed } from '@angular/core/testing';
import { TestService } from './test.service';
describe('TestService', () => {
let service: TestService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [ TestService ]
});
service = TestBed.inject(TestService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});
有人知道为什么会这样吗?这到底是什么问题?
编辑: 是的,我知道我可以创建一个模拟。但是,这个问题对我来说似乎仍然很奇怪,所以我想深入了解它而不是寻找解决方法。
编辑 2:
直接使用 ng test <project> --test-file=<filename> 产生与使用 NXCLI 执行测试相同的结果
编辑 3: 我按照要求在 StackBlitz 上分享了我的代码:https://stackblitz.com/edit/ng-unittest-issue
【问题讨论】:
-
它对我有用。您不需要将服务添加到 providers 数组
-
我没有 nx 项目,无法在本地测试它,但我的一位同事说他遇到了同样的问题,并通过设置
emitDecoratorMetadata: true内部tsconfig.spec.json修复了它。试一试,也许可以解决您的问题:) -
您如何建议我们运行您的 stackblitz 来查看问题 - 当我打开它时,它正在运行您的组件,而不是测试?如果我修改你的 stackblitz 来运行测试,那么一切似乎都可以正常工作
标签: angular jestjs karma-runner nomachine-nx