使用Jasmine和Karma进行角度测试

时间:2020-08-18 15:44:34

标签: angular typescript unit-testing jasmine karma-runner

我正在尝试提高Angular应用程序的代码覆盖率。在代码覆盖率中,提到了是否覆盖其他条件。谁能告诉我该怎么做? 随时询问更多代码详细信息。

public searchByText(textVal: any): void {
        let matchedEquipments = [];
        // **
        if (this.model.searchText.length > 1) {
            matchedEquipments = this.refineByText(textVal, this.equipments);
        } else {
            matchedEquipments = this.equipments;
        }
        // **
        matchedEquipments = this.refineByPlant(this.model.plants, matchedEquipments);
        matchedEquipments = this.refineByPlantIsland(this.model.plantIslands, matchedEquipments);
        matchedEquipments = this.refineByProcess(this.model.processes, matchedEquipments);
        matchedEquipments = this.refineByIndustry(this.model.divisions, matchedEquipments);
        this.displayClientData(matchedEquipments);
        this.updateSearchCounters(SelectionFilter.FreeText);
}

规格:

it('verify the result with search', async(() => {
        equipmentSelectionComponent.searchByText("123");
        //equipmentSelectionComponent.model.searchText = "123";
        expect(equipmentSelectionComponent.matchedData.length).toBeGreaterThan(0);
}));

2 个答案:

答案 0 :(得分:1)

您需要编写1个以上的it块才能进行测试:

it('should call "refineByText" when search Text is there', async(() => {
   spyOn(equipmentSelectionComponent,'refineByText').and.callThrough();
   equipmentSelectionComponent.model.searchText = "some Val";
   equipmentSelectionComponent.equipments = ["item1"]
   equipmentSelectionComponent.searchByText("123");
   expect(equipmentSelectionComponent.refineByText).toHaveBeenCalledWith("123",["item1"]); // <-- this will check true condition
   // I dont see "matchedData" in your provided code so I dont know about this check.
   expect(equipmentSelectionComponent.matchedData.length).toBeGreaterThan(0);
   // spy and check other function calls as well just like I did for refineByText
}));

it('should not call "refineByText" when search Text is empty', async(() => {
   spyOn(equipmentSelectionComponent,'refineByText').and.callThrough();
   equipmentSelectionComponent.model.searchText = "";
   equipmentSelectionComponent.searchByText("123");
   expect(equipmentSelectionComponent.refineByText).not.toHaveBeenCalled(); // <-- this will check true condition
   // similarly use use "toHaveBeenCalledWith(val) for other functions
}));

我建议您阅读testing with spiessome more basic testing ways的角度文章。这将帮助您更加熟悉单元测试的思维方式。随时鼓掌! :)

答案 1 :(得分:0)

下面的测试用例应该能够包含您的测试用例的覆盖范围

  1. 如果条件:应在searchText具有值时通过修改设备将其分配给matchEpipment

    期望:

     refineByText toHaveBeenCalledWith(textVal, this.equipments)
    
  2. 其他条件:当searchText没有值时,应将设备分配给matchEquipments

    期望:

     refineByText not.toHaveBeenCalledWith(textVal, this.equipments)
    
相关问题