Javascript 角度单元测试:这段代码值得单元测试吗?
我刚刚开始在angular中进行单元测试。我很难弄清楚应用程序中的单元测试应该包括哪些内容。我应该测试下面的代码吗 如果我这样做,我将基本上传递一个有效的Javascript 角度单元测试:这段代码值得单元测试吗?,javascript,angular,unit-testing,jasmine,karma-jasmine,Javascript,Angular,Unit Testing,Jasmine,Karma Jasmine,我刚刚开始在angular中进行单元测试。我很难弄清楚应用程序中的单元测试应该包括哪些内容。我应该测试下面的代码吗 如果我这样做,我将基本上传递一个有效的mode值,并检查defaultProperties的各种属性的正确值是否由this.propertiesSource发出。这不就像一遍又一遍地写同样的代码吗?这只是一个例子,应用程序中充满了这样的实例 如果我不测试这些东西,那么我的代码覆盖率可能可以忽略不计 以下是来自组件的代码示例: mode: string; defaultProp
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
}
}
虽然这看起来有点乏味,但最好是尽可能地进行单元测试 出于以下几个原因,我将对此进行单元测试:
如果可以测试,就应该进行测试。虽然这看起来有点乏味,但最好是尽可能地进行单元测试 出于以下几个原因,我将对此进行单元测试:
如果可以测试,就应该测试。正如Shashank Vivek所指出的,似乎有很多冗余。也许可以考虑一些常见的功能 除此之外,代码当然应该进行测试,但不一定要通过单元测试来完成。集成测试或UI测试可能是更合适的方法:通过单元测试,正如您正确观察到的,您的测试可能只是复制代码。但是,它们可能不是很有价值,因为它们不会帮助您找到bug 我假设这些设置是为了配置某个小部件库或类似部件的行为。当然,您可以编写一个测试,检查
模式
“编辑”的刷新
值是否为假
。此测试基于您的假设,即此设置将导致相应小部件的特定行为。但是,即使您的假设是错误的,单元测试仍然会通过,因为它只是反映了您自己的错误理解
要查看这些设置是否正确,因此您必须在代码与小部件库集成的地方执行测试,以查看设置是否真正达到预期效果-但这不再是单元测试。正如Shashank Vivek所指出的,似乎存在大量冗余。也许可以考虑一些常见的功能 除此之外,代码当然应该进行测试,但不一定要通过单元测试来完成。集成测试或UI测试可能是更合适的方法:通过单元测试,正如您正确观察到的,您的测试可能只是复制代码。但是,它们可能不是很有价值,因为它们不会帮助您找到bug 我假设这些设置是为了配置某个小部件库或类似部件的行为。当然,您可以编写一个测试,检查
模式
“编辑”的刷新
值是否为假
。此测试基于您的假设,即此设置将导致相应小部件的特定行为。但是,即使您的假设是错误的,单元测试仍然会通过,因为它只是反映了您自己的错误理解
要查看这些设置是否正确,因此您必须在代码与小部件库集成的地方执行测试,以查看设置是否真正达到预期效果-但这不再是单元测试。因为
propertiesSource
是私有的,我假设它是由组件本身的某个地方订阅的,对吗那么,为什么要创建observable,因为它在同一个组件中
?我认为您的担心是正确的,您应该重新设计代码以减少冗余代码。如果在整个角度项目中都复制了相同的代码,那么也应该避免编写太多的if
和else
,您能解释一下组件的预期性能吗。或者更多关于它的代码,这样我可以从改进(如果有的话)中提出建议,因为propertiesSource
是私有的,我假设它是由组件本身的某个地方订阅的,对吗那么,为什么要创建observable,因为它在同一个组件中
?我认为您的担心是正确的,您应该重新设计代码以减少冗余代码。如果在整个角度项目中都复制了相同的代码,那么也应该避免编写太多的if
和else
,您能解释一下组件的预期性能吗。或者更多关于它的代码,以便我可以从改进中提出建议(如果有的话)