angular - 测试使用静态方法返回不一致的结果
问题描述
我注意到我的 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 的配置选项。
推荐阅读
- scala - Akka Streams 递归流调用
- intellij-idea - 为什么我的 Intellij Ultimate 检测不到 virtualenv?
- php - XML更新后PHP中的MYSQL事件
- java - 如何从另一个类中的另一个按钮调用一个按钮?
- javascript - 如何在此 Jest 测试中触发窗口加载事件?
- julia - 如何在不使用任何宏的情况下停止 Julia 中的循环并同时打印 ErrorMsg?
- javascript - 将 exceljs 工作簿发送到后端
- xml - 使用 AND 运算符的 DTD 混合内容
- c++ - 为 std::strings 重载 operator+ - 一个坏主意?
- css - 第一个链接在响应式网格中不起作用