【发布时间】:2019-12-16 05:44:49
【问题描述】:
我设置了一个测试平台来验证我的模块是否已定义。
describe('MyModule', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [MyModule]
}).compileComponents();
}));
it('should be defined', () => {
expect(MyModule).toBeDefined();
});
});
我的代码样式工具 SonarQube 要求我将 .then() 语句添加到 .compileComponents() 行,因为返回的承诺未使用。
最好保持原样并忽略样式工具,还是添加一个空语句,如.then(() => { /* empty */ })?
我倾向于忽略该工具,但想知道哪种方式更适合已发布的 Angular 样式文档。
【问题讨论】:
-
我在 WebStorm/TSLint 中收到这些警告。这不是技术问题,因为如果没有人调用
then(),promise 仍然会解决。该警告试图告诉开发人员他们没有处理产生的结果并且很可能是一个错误,但在这种情况下它不是一个错误。因此,您可以通过使用注释禁用它来忽略或抑制它。调用.then()只是为了抑制警告。 -
那么您是否建议添加忽略语句?
-
如果您使用的是 Sonar,并且您希望 Sonar 不报告该问题,请添加忽略或重新配置 Sonar。如果您要与不会使用 Sonar 的其他人共享源代码,请忽略它。添加
.then()可以很容易地被其他认为不应该存在的开发人员删除。这与辩论缩进的制表符与空格是一样的。自己做决定…… -
在 JavaScript 中终止所有内容是一种很好的做法,因为当函数返回
Promise而不是void或未按预期返回Promise时,您可能会遇到意外情况。 SQ 和 tslint 中的类似规则是有原因的,你应该遵守它们。 -
不要忘记,如果您不喜欢空的
then并且不喜欢linting 错误beforeEach(async(() => { return TestBed.configureTestingModule({ // <--- Notice the return imports: [MyModule] }).compileComponents(); }));,您可以简单地return整个方法链
标签: angular unit-testing promise jasmine