Пользовательский метод для модели сотрудника — backbone.js один тестовый пример терпит неудачу

#javascript #json #testing #backbone.js #jasmine

#javascript #json #тестирование #backbone.js #jasmine

Вопрос:

Проблема с методом getExperience. не знаю, почему я получаю это, может кто-нибудь, пожалуйста, помочь мне в этом. Ошибка: тестирование пользовательского метода в модели Employee Тестирование метода getExperience модели Employee Проверка опыта в модели Employee после СБОЯ выполнения метода getExperience Ожидалось, что 0 будет равно 21.

 <!-- Test Case-->

  it('Checking experience in Employee Model after getExperience method execution', function() {
            var current_date = new Date();
            var current_year= current_date.getFullYear();
            var calculated_exp= current_year-1999;
              employee.getExperience(employee.get('year_of_joining'));
              expect(employee.get('experience')).toBe(calculated_exp);
          });  

 var Employee = Backbone.Model.extend({
 //Write your code here
 getExperience: function(experience) {
       var year_of_joining=employee.get('year_of_joining');
        var current_date = new Date();
            var current_year= current_date.getFullYear();
            var calculated_exp= (current_year)-(year_of_joining);
            return calculated_exp;
    }
});
var   employee = new Employee({
        employee_id:1111,
        name:'Sarah Roe',
        year_of_joining:1999,
       address:'ABC Street',
        experience:0
    });
    alert("Experience of " employee.get("name") " is " employee.getExperience(employee.get('year_of_joining')) " years");;  
  <!-- Hmtl -->
<html>    
<head>    
</head>    
<body>    
<div id="app"></div



<script src="lib/jquery/dist/jquery.js"></script>
<script src="lib/underscore/underscore.js"></script>
<script src="lib/backbone/backbone.js"></script>  
<script  type = "text/javascript"  src="index.js"></script>

</html>   

Ответ №1:

 <script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>

<script>
// JS with example of setting experience value being set third Example
// JavaScript
var Employee = Backbone.Model.extend({
  //Write your code here

  default: {
    employee_id: 1111,
    name: 'Sarah Roe',
    year_of_joining: 1999,
    address: 'ABC Street',
    experience: null
  },
  getExperience: function(year_of_joining) {
    var current_date = new Date();
    var current_year = current_date.getFullYear();
    var calculated_exp = (current_year) - (year_of_joining);

    this.set({
      experience: calculated_exp
    });
    return calculated_exp;
  }

});


var employee = new Employee({
  employee_id: 721,
  name: "Shrikrishna",
  year_of_joining: 1999,
  experience: 22
});
//please add properties and values of Employee model
//employee.set({'experience': employee.get('year_of_joining')}) ;
alert("Experience of "   employee.get("name")   " is "   employee.getExperience(employee.get('year_of_joining'))   " years");
</script>
<div id="container">Loading...</div>  

Комментарии:

1. 0 Из вопроса, заданного Hacker Rank, есть несколько тестовых примеров, из которых один обычно терпит неудачу. в котором указано ожидаемое значение 22 вместо 0. Итак, полный ответ размещен здесь. Итак, ответ на вопрос

Ответ №2:

Вы никогда не устанавливаете новое значение для experience атрибута вашей модели. Поскольку для прохождения вашего теста вам следует использовать: expect(employee.getExperience()).toBe(calculated_exp);

Обратите внимание, что аргумент experience никогда не используется вашей функцией getExperience.

Или заменить:

employee.getExperience(employee.get('year_of_joining'));

с:

employee.set('experience', employee.getExperience());

Ответ №3:

Вот правильный ответ для пользовательского метода для модели сотрудника в backbonejs:

 var Employee = Backbone.Model.extend({
  //Write your code here
 
  getExperience: function(year_of_joining) {
    var current_date = new Date();
    var current_year = current_date.getFullYear();
    var calculated_exp = (current_year) - (year_of_joining);

    this.set({
      experience: calculated_exp
    });
    return calculated_exp;
  }

});


var employee = new Employee({
      employee_id:1111,
        name:'Sarah Roe',
        year_of_joining:1999,
        address:'ABC Street',
        experience:0,   
});
 
alert("Experience of " employee.get("name") " is " employee.getExperience(employee.get('year_of_joining')) " years");
   
   <!-- Hmtl -->
<html>    
<head>    
</head>    
<body>    
<div id="app"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.13.4/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.4.1/backbone-min.js"></script>  
<script  type = "text/javascript"  src="index.js"></script>

</html>