Тест Mocha - решение assertion_error

Практикуюсь в работе с 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)

По сути, я пытаюсь понять, почему я получаю ошибку утверждения, и исправить ее.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
234
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если ты это сделаешь

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")

конструктор класса оплата принимает три аргумента, а порядок — название, карта, цена. Поэтому, если вы передаете конструктору одно значение, оно переходит к переменной имени. Поэтому, пожалуйста, сохраняйте порядок аргументов, используемых в вашем уме.

Nikhil Unni 30.04.2019 06:10

Спасибо за ваш вклад. Кажется, в первой части моего теста (должен обрабатываться платеж) я включил 3 параметра. Я перестал использовать 3 параметра, и все работало до теста «должно вернуть цену». Я дам вам знать, что работает.

John Beasley 30.04.2019 14:36

Успешный тест. Спасибо за помощь.

John Beasley 01.05.2019 01:34

Другие вопросы по теме