шаблоны жасмина и позвоночника и JS - PullRequest
2 голосов
/ 29 декабря 2011

Привет, я пытаюсь использовать Jasmine Headkit: http://johnbintz.github.com/jasmine-headless-webkit/

Я встраивал шаблоны js в основной HTML-файл моего приложения. Мое приложение начинает становиться достаточно сложным, и я подумал, что смогу использовать жасмин, чтобы дать ему еще немного тестового покрытия. Так как мои представления ссылаются на шаблоны javascript, которые находятся в моем основном HTML-файле, мои представления будут содержать ошибку. Есть ли способ обойти это? Могу ли я как-то воспроизвести состояние HTML-файла моего приложения? Т.е. загрузить все его js-шаблоны и загрузить javascript-коды поставщика в правильном порядке в заголовке?

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Вы можете загрузить html-приборы в свои спецификации жасмина. Смотри: https://github.com/velesin/jasmine-jquery

loadFixtures('myfixture.html');
$('#my-fixture').myTestedPlugin();
expect($('#my-fixture')).to...;

В любом случае вы можете проверить мой пример проекта с помощью backbone.js и jasmine: https://github.com/lucassus/tdd-with-backbonejs и проверить, как я использую эту технику в реальной жизни. Также я собираюсь написать сообщение в блоге о тестировании представлений основы с помощью жасмина: http://blog.bandzarewicz.com

0 голосов
/ 30 декабря 2011

Конечно, вы можете добавить свои файлы шаблонов на страницу вашего жасминового тестера.

Еще одним решением было бы смоделировать ваш DOM-элемент views.Вы можете вставить элемент в конструктор как new View({el: $($('myTemplate').html())}).Таким образом, вы можете добавить в тестовый элемент макет или шпион, при этом вам не нужно создавать элемент DOM на основе вашего шаблона:

beforeEach(function() {
    el = {bind: function(){}};
    spyOn(el, 'bind');
    var OrderListView = new OrderSumView({el: el, model: model});
});

it('it should render the sum after firing the remove event', function() {

    //test that bind('click', someFunction) was called to your element
    expect(el.bind).toHaveBeenCalledWith('click', model.bind.argsForCall[0][1]);

    // fire up the function that was bind to the click event
    el.bind.argsForCall[0][1]() 
})

С помощью этого решения вы в большинстве случаев можете полностью макетировать html.Это то, как мы тестируем наше большое приложение GWT.С GWT гораздо проще, чем с магистралью, потому что мы находимся в мире JAVA, но принцип тот же.Не проверяйте DOM, просто проверьте свою бизнес-логику.Если это сделано так для моего частного магистрального проекта, и оно работает хорошо.

Взгляните также на это SO: Остановите вызов селектора jQuery?

...