使用静态方法测试 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。
我注意到我的 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。