Вызов метода класса Javascript вызывает ошибку «Не удается найти переменную» - PullRequest
1 голос
/ 18 мая 2019

Когда я запускаю тест на чайную ложку жасмина, я получаю следующую ошибку.

Error

ReferenceError: Невозможно найти переменную: modify_create_favorite в http://localhost:3000/assets/favorite.self-67fd17843e64bfbeed401bd.js?body=1?body=1 (строка 49)

файл fav.js

class Favorites {

  static create(listing_id) {
    modify_create_favorite(find_favorite(listing_id));
  }

  static find_favorite(listing_id) {
    return $("#i-favorite-"+listing_id);
  }

  static modify_create_favorite(object) {
    object.removeClass('fa-heart-o').addClass('fa-heart').parent().attr('data-method','delete');
  }
}

чайная ложка жасмина:

  it("will change the class", function() {
    fixture.set(favorite_html);
    Favorites.create('17');
    expect( $('#i-favorite-17', fixture.el) ).not.toHaveClass( 'fa-heart-o')
    expect( $('#i-favorite-17', fixture.el) ).toHaveClass( 'fa-heart')
    expect( $('#i-favorite-17', fixture.el).parent() ).toHaveAttr("data-method",'delete')    
    expect(jQuery).toBeDefined();
  });

1 Ответ

2 голосов
/ 18 мая 2019

static методы могут быть вызваны только путем вызова класса без создания экземпляра, поэтому внутри create вы должны сделать:

Favorites.modify_create_favorite(Favorite.find_favorite(listing_id))

//or 
this.modify_create_favorite(this.find_favorite(listing_id))

В вашей текущей реализации ваш код ищет функцию с именем modify_create_favorite(), потому что не знает, что это метод вашего класса.

Подробнее о static методах https://developer.mozilla.org/en-US/docs/Web/JavaScript/reference/Classes/static

...