Практикуюсь в работе с Mocha и классами. Я писал несколько тестов, которые были успешными, пока не столкнулся с ошибкой утверждения, с чем я до сих пор не слишком знаком.
Мой файл test.js выглядит следующим образом, начиная с пары классов:
var assert = require('assert');
class Payment
{
constructor (name,card,price)
{
this.name = name;
this.card = card;
this.price = price;
}
}
class BillingService
{
processPayment(payment)
{
if (payment.card == "123"){return true;}
else{return false;}
}
checkName(payment)
{
if (payment.name == "John B"){return true;}
else{return false;}
}
checkTotal(payment)
{
if (payment.price == "50.00"){return true;}
else{return false;}
}
}
Далее приступаю к тестам:
describe('BillingService', function()
{
it('should process payment', function()
{
var x = new Payment("John B", "123", "50.00");
var billingService = new BillingService();
var outcome = billingService.processPayment(x);
assert.equal(true, outcome);
});
it('should not process payment', function()
{
var x = new Payment("John B", "xf23", "50.00");
var billingService = new BillingService();
var outcome = billingService.processPayment(x);
assert.equal(false, outcome);
});
it('should get name', function()
{
var x = new Payment("John B");
var billingService = new BillingService();
var outcome = billingService.checkName(x);
assert.equal(true, outcome);
});
it('should not get name', function()
{
var x = new Payment("Scarlett");
var billingService = new BillingService();
var outcome = billingService.checkName(x);
assert.equal(false, outcome);
});
it('should return price', function()
{
var x = new Payment("50.00");
var billingService = new BillingService();
var outcome = billingService.checkTotal(x);
assert.equal(true, outcome);
});
it('should not return price', function()
{
var x = new Payment("23.00");
var billingService = new BillingService();
var outcome = billingService.checkTotal(x);
assert.equal(false, outcome);
});
}
На этом этапе я могу запустить команду «mocha test» и начать тестирование.
Как было сказано выше, я добился успеха. Затем я получил следующее сообщение:
BillingService
✓ should process payment
✓ should not process payment
✓ should get name
✓ should not get name
1) should return price
✓ should not return price
5 passing (11ms)
1 failing
1) BillingService
should return price:
AssertionError [ERR_ASSERTION]: true == false
+ expected - actual
-true
+false
at Context.<anonymous> (test.js:130:12)
По сути, я пытаюсь понять, почему я получаю ошибку утверждения, и исправить ее.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если ты это сделаешь
it('should return price', function()
{
var x = new Payment("50.00");
var billingService = new BillingService();
var outcome = billingService.checkTotal(x);
assert.equal(true, outcome);
});
он всегда возвращает false в качестве результата. Потому что когда вы вызываете x = new Payment("50.00"), он создает {name:"50.00", card : undefined, price:undefined}. Итак, мы ясно видим, что ценового элемента нет. Поэтому он возвращает ложь. Вот почему ваше утверждение не удалось, я думаю.
Если вы хотите установить только ценовой элемент, вы можете сделать либо x = new Payment(null,null,"50.00"), либо x = new Payment("","","50.00")
Спасибо за ваш вклад. Кажется, в первой части моего теста (должен обрабатываться платеж) я включил 3 параметра. Я перестал использовать 3 параметра, и все работало до теста «должно вернуть цену». Я дам вам знать, что работает.
Успешный тест. Спасибо за помощь.
конструктор класса оплата принимает три аргумента, а порядок — название, карта, цена. Поэтому, если вы передаете конструктору одно значение, оно переходит к переменной имени. Поэтому, пожалуйста, сохраняйте порядок аргументов, используемых в вашем уме.