角度单元测试:此代码值得进行单元测试吗?

时间:2019-06-20 07:45:33

标签: javascript angular unit-testing jasmine karma-jasmine

我刚刚开始进行角度单元测试。我很难弄清楚应用程序中的单元测试应涵盖哪些内容。我应该测试以下代码吗?

如果我愿意,我基本上将传递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
    }  
   }

2 个答案:

答案 0 :(得分:0)

虽然这看起来有些乏味,但最好对所有可能的单元进行单元测试。

出于某些原因,我将对此单元进行测试:

  1. 您可以测试边缘情况。例如,如果mode为null或不是您计划的值,该怎么办。您需要能够处理该问题。
  2. 面向未来的开发人员。如果有人出现并意外更改其中一个值,则测试将失败,并且您会知道出了点问题。如果他们更改值,则将需要更改测试。因此,验证更改实际上应该发生。

如果可以测试,就应该测试。

答案 1 :(得分:0)

正如Shashank Vivek所指出的那样,似乎存在很多冗余。也许可以排除一些常用功能。

除此之外,当然应该对代码进行测试,但不一定必须通过单元测试来完成。可能的是,集成测试或UI测试是更合适的方法:通过单元测试,正如您正确观察到的那样,您的测试很可能只是复制代码。但是,从它们无法帮助您发现错误的意义上说,它们可能不是很有价值。

我假设这些设置是为了配置某些小部件库或类似内容的行为。当然,您可以编写一个测试来检查mode的值,“编辑” refresh的值是false。该测试基于您的假设,即该设置将导致相应小部件的某种行为。但是,即使您的假设是错误的,单元测试仍然会通过,因为它只是反映了您自己的错误理解。

要查看这些设置是否正确,因此,您必须在将代码与窗口小部件库集成的地方执行测试,以查看设置是否确实达到了预期的效果-但这不再是单元测试。