【发布时间】:2019-11-03 00:00:32
【问题描述】:
我刚刚开始用 Angular 进行单元测试。我很难弄清楚应用程序中的单元测试应该涵盖哪些内容。我应该测试下面的代码吗?
如果我这样做,我实际上将传递一个有效值 mode 并检查 defaultProperties 的各种属性的正确值是否由 this.propertiesSource 发出。这不就像一遍又一遍地编写相同的代码吗?而这只是一个例子,应用中充满了这样的例子。
如果我不测试这些东西,那么我的代码覆盖率可能可以忽略不计。
下面是组件代码示例:
mode: string;
defaultProperties = {
editable: this.editable,
showToolbar: this.showToolbar,
viewMode: this.viewMode,
editMode: this.editMode,
showPopup: this.showPopup,
formSavedClicked: this.formSavedClicked,
cancelClicked: this.cancelClicked,
refresh: this.refresh,
};
private propertiesSource = new BehaviorSubject(this.defaultProperties);
要测试的方法:
setGridMode(mode) {
this.mode = mode;
if (mode === "edit") {
this.propertiesSource.next({
editable: true,
showToolbar: true,
viewMode: false,
editMode: true,
showPopup: false,
formSavedClicked: this.formSavedClicked,
cancelClicked: this.cancelClicked,
refresh: false,
});
} else if (mode == "save") {
this.propertiesSource.next({
editable: false,
showToolbar: false,
viewMode: true,
editMode: false,
showPopup: false,
formSavedClicked: this.formSavedClicked,
cancelClicked: this.cancelClicked,
refresh: true,
})
// more code..multiple if else block like above
}
}
【问题讨论】:
-
因为
propertiesSource是私有的,我假设它被组件本身的某个地方订阅,对吧?Then, why are creating observable is its in the same component?我认为您的担忧是有效的,您应该重新设计代码以减少冗余代码。如果在整个 Angular 项目中复制相同的代码,也应该避免编写这么多的if和else -
你能解释一下组件的ExpectedBahavior吗?或有关它的更多代码,以便我可以提出改进建议(如果有)
标签: javascript angular unit-testing jasmine karma-jasmine