我想为此培训编写TDD / BDD测试。该问题的场景是:
对于每个高于$ 50的购物篮,总折扣的2%将作为折扣
对于每个高于$ 100的购物篮,总折扣的5%将作为折扣
所以我写了这些测试(使用茉莉花):
describe("discount", function () {
describe("When total price calculated", function () {
it("Should get 4% discount if it is more than $100", function () {
let total = 110;
expect(checkout.calcDiscountBiggerThan100(total)).toBe(total / 0.04);
});
it("Sould get 2% discount if it is more than $50 and less than $100", function () {
let total = 70;
expect(checkout.calcDiscountBetween50And100(total)).toBe(total % 0.02);
})
it("Sould calc no discount if it less than $50", function () {
let total = 45;
expect(checkout.calcDiscountBetween50And100(total)).toBe(0);
})
});
});
但是当我想为他们编写代码时,我不知道该怎么办! 如果我想这样写:
class checkout{
calcDiscount(total) {
if (total > 100)
return total * 0.04
if (total > 50)
return total * 0.02
return 0;
}
}
然后我在这里有2个问题。
如果我想参加考试,我将有:
calcDiscountBiggerThan100(total) {
if (total > 100)
return total * 0.04
}
calcDiscountBetween50And100(total) {
if (total > 50)
return total * 0.02
}
这又是一个问题,我应该如何针对开放式/封闭式原理对其进行重构。
请注意,可以将$ 100更改为$ 120。并且可能是其他规则添加到这些规则中。那我应该有一个名为DiscountBetween50And100的类吗?
我是测试新手。请帮助我