Как проверить, какой класс расширяет моя коллекция Backbone в Jasmine

У меня есть собственный класс Backbone.Collection в Coffeescript.

Я назвал его (он отвечает за пагинацию):

class SI.PaginatedCollection extends Backbone.Collection

Я хочу написать спецификацию Jasmine, которая будет проверять, расширяю ли я этот конкретный класс.

Извините за мой английский, я сейчас, наверное, ужасен. ;)

PS Я могу анализировать Javascript, но Coffeescript был бы идеальным.


person nothing-special-here    schedule 29.05.2012    source источник


Ответы (3)


Мне кажется излишним проверять это, но вы можете сделать что-то вроде этого:

describe "SI.PaginatedCollection", ->

  beforeEach ->
    @collection = new SI.PaginatedCollection()

  it "is a subclass of Backbone.Collection", ->
    expect(@collection instanceof Backbone.Collection).toBeTruthy()

Если вы собираетесь часто проверять instanceof и/или вам важен описательный вывод Jasmine, было бы целесообразно создать собственный сопоставитель, чтобы вы могли написать это:

expect(@collection).toBeInstanceOf(Backbone.Collection)
person Buck Doyle    schedule 29.05.2012

В Jasmine 2.0 вы можете использовать сопоставитель jasmine.any(). Например:

collection = new SI.PaginatedCollection();

expect(collection).toEqual(jasmine.any(Backbone.Collection));

как указано в этой записи блога

person average Joe    schedule 23.07.2014
comment
Гораздо удобнее, чем создавать собственный сопоставитель. Однако несколько запутанный API. - person backdesk; 10.02.2015

Не существует правильного способа получить ссылку super ни в JavaScript, ни в Backbone, даже с использованием метода __super__ Backbone нет рекомендуется в документации.

Я думаю, что самый чистый подход — это вручную маркировать ваши подклассы с помощью псевдостатического атрибута, например:

var SI.PaginatedCollection = Backbone.Collection.extend({
  parent: "Backbone.Collection"
});

Каждый раз, когда вам нужно проверить экземпляр от определенного родителя, просто проверьте файл myInstance.parent.

person fguillen    schedule 29.05.2012
comment
Я использую Кофескрипт. Я делаю это с помощью: class SI.Collections.Sentences extends SI.PaginatedCollection, и это работает хорошо. - person nothing-special-here; 29.05.2012