我有一个Range
类,其中包含一个startOffset和一个endOffset,如下所示:
class Range extends Immutable.Record({ startOffset: 0, endOffset: 0 }) {
// ...
}
然后我有一个RangeList
类,其中包含一系列范围:
class RangeList extends Immutable.Record({
ranges: Immutable.List.of(Range()),
focusedRangeIndex: 0
}) {
addRange(range) {
return this.setRanges(this.ranges.push(range))
}
setRanges(ranges) {
return this.set('ranges', ranges).simplify()
}
// merges any overlapping ranges
simplify() {
}
// ...
}
现在,我已经设置了单元测试,并且我对simplify
函数进行了测试:
describe('simplify', () => {
const r = (a, b) => Range({ anchorOffset: a, focusOffset: b })
describe('when there are no overlapping ranges', () => {
it('returns itself', () => {
// ...
})
})
describe('when there are overlapping ranges', () => {
it('merges the overlapping ranges (...)', () => {
// ...
})
it('sets the focused range index to the index of the new range which contains the old focused range', () => {
// ...
})
})
})
simplify
函数上的测试是~300 LOC。
现在我的问题是我有~6种其他方法可以计算某些内容然后返回一个新范围并使用simplify
方法来简化它。由于simplify
测试本身约有300行代码,我不想在另一个~6方法上重复这个,因为那时.test
会太长,我觉得重复一堆这样的代码并不好。 (例如,当你创建一个范围时,它会自动简化它,当你调用setRanges
时,它会做同样的事情,这会使测试几乎相同)。
所以如果有更好的方法来测试所有~6种其他方法(只调用我已经测试过的simplify
方法),那么我就是在游荡,自动简化结果? (例如,测试他们做的最后一件事是调用简化方法)。