Как мне написать тест для этой проблемы? - PullRequest
1 голос
/ 25 мая 2019

Я хочу написать тесты 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 проблемы здесь.

  1. Я не следую своим сценариям
  2. Как я могу следовать принципу открытия / закрытия здесь (какими должны быть мои занятия)

И еслиЯ хочу выступить в качестве моего теста, у меня будет:

calcDiscountBiggerThan100(total) {
    if (total > 100)
        return total * 0.04
}
calcDiscountBetween50And100(total) {
    if (total > 50)
        return total * 0.02
}

И здесь у меня снова проблема, как мне его рефакторинг по принципу открытого / закрытого.

Обратите внимание, что можно изменить 100 долларов на 120 долларов.И могут быть еще правила добавить к этим правилам.тогда я должен иметь класс с именем DiscountBetween50And100 или что?

Я новичок в тестировании.пожалуйста, помогите мне

...