Вот близкое приближение моего локального кода: https://jsfiddle.net/gurnoors/xpvt214o/948097/ Скрипка работает, но точный код в моей локальной среде (вставленный ниже) не работает:
describe('policyReviewsSearch', function() {
var view;
beforeEach(function() {
view = new PolicyReviewListConsolidatedView({
collectionData: policyReviewModelsForSearch,
queueItem: queueItemModel
});
view.render();
});
afterEach(function() {
view.remove();
});
// ------------------> fails
it('should filter down to only show the quality label on search input q', function() {
view.$(document).ready(function(){
view.$('#policy-review-search').val('q');
view.$('#policy-review-search').trigger('keyup');
var searchResults = view.$('#policy_reviews_list_consolidated > table > tbody tr.policy-review-consolidated:visible');
console.log("searchResults: " + searchResults[0]); // undefined
console.log("searchResults.length " + searchResults.length); // returns 0; expected 1
var test = $('#policy_reviews_list_consolidated');
console.log("test: " + test[0]); // undefined
console.log($); // okay
expect(searchResults.length).toEqual(1); // 0
var policyInSearchResults = searchResults.find('td:first').text().toLowerCase(); // undefined
expect(policyInSearchResults).toEqual('quality');
});
});
// passes
it('should hide all rows on search input zyx123', function() {
view.$('#policy-review-search').val('zyx123');
view.$('#policy-review-search').trigger('keyup');
var searchResults = view.$('#policy_reviews_list_consolidated > table > tbody tr.policy-review-consolidated');
console.log("zyx123 - searchResults: " + searchResults[0]); // okay
console.log("zyx123 - searchResults.length " + searchResults.length); // 4
searchResults.each(function() {
var isHidden = $(this).is(":hidden");
expect(isHidden).toEqual(true);
});
});
}); // end describe(policyReviewsSearch)
Я пытался обернуть тест в $(document).ready
в нескольких местах, но, похоже, это не сработало.
У меня есть несколько вопросов, чтобы упростить отладку:
- Есть ли способ просмотреть (как в отладчике / консоли Chrome), что визуализируется тестами Jasmine.
- keyup должен (и делает) запускать
search
функция.Как мне сделать следующее:
//...
view.$('#policy-review-search').val('q');
view.$('#policy-review-search').trigger('keyup');
// how to do this:
// wait for search function for finish
var searchResults = view.$('#policy_reviews_list_consolidated > table > tbody tr.policy-review-consolidated:visible');
// ...
Я читаю статьи о JS-событиях, магистрали, jquery и тесте Jasmine и буду рад услышать некоторые рекомендации (книги / курсы / статьи)
Спасибо!