使用静态方法测试 return 个不一致的结果

Tests return inconsistent results with static methods

我注意到我的 Karma 测试返回了一组不一致的结果。

他们经常通过,但我经常收到此错误:

例如1) 如果按钮数超过 1

,应从课程内容中删除按钮元素

偶尔会得到 Expected 3 to be 2

例如2) 如果按钮数等于 1

,则不应从课程内容中删除按钮元素

偶尔会得到 Expected 2 to be 1

我正在测试静态方法,有什么方法可以保证结果一致吗?

import { TestBed } from '@angular/core/testing';
import { CourseContentElementButtonService } from './course-content-element-button.service';
import { TEST_BUILDER_INITIAL_STATE } from '../../../course';

describe('CourseContentButtonService', () => {
  const course = TEST_BUILDER_INITIAL_STATE;
  const courseContent = course.modules[0].content;
  const courseContentUid = course.modules[0].content[0].uid;
  const courseContentElementUid = course.modules[0].content[0].button[0].uid;

  beforeEach(() => {
    TestBed.configureTestingModule({});
  });

  describe('addCourseContentElementButton()', () => {
    it('should add button element to course content', () => {
      const newCourseContent = CourseContentElementButtonService.addCourseContentElementButton(
        courseContent,
        courseContentElementUid,
        courseContentUid
      );
      expect(newCourseContent[0].button.length).toBe(2);
    });
  });

  describe('deleteCourseContentElementButton()', () => {
    it('should delete button element from course content if button count is more than 1', () => {
      let newCourseContent = CourseContentElementButtonService.addCourseContentElementButton(
        courseContent,
        courseContentElementUid,
        courseContentUid
      );
      expect(newCourseContent[0].button.length).toBe(2);
      newCourseContent = CourseContentElementButtonService.deleteCourseContentElementButton(
        newCourseContent,
        1,
        courseContentUid
      );
      expect(newCourseContent[0].button.length).toBe(1);
    });
    
    it('should not delete button element from course content if button count is equal to 1', () => {
      let newCourseContent = CourseContentElementButtonService.deleteCourseContentElementButton(
        courseContent,
        1,
        courseContentUid
      );
      expect(newCourseContent[0].button.length).toBe(1);
    });
  });
});

假设您使用的是 Jasmine(您没有在问题中指定,但根据我的经验,这是迄今为止最常见的)- 默认情况下,测试顺序是随机的。而且您不会在每次测试之前重置状态。这意味着 addCourseContentElementButton 有 1/3 的机会 运行 在其他方法之前。

您可以确保您的测试不依赖于状态(即不依赖于其他测试的执行),或者如果在您的情况下它们应该按顺序执行,请禁用随机顺序。

可以找到 jasmine 的配置选项 here