guard / guard-jasmine

The Swiss Army knife for automated Jasmine specs in your console.
http://guard.github.io/guard-jasmine
MIT License
303 stars 81 forks source link

Cannot decode JSON from PhantomJS runner - The Jasmine reporter is not available! #151

Closed dnagir closed 11 years ago

dnagir commented 11 years ago

I'm getting the message above which could be causing the underlying problem.

Running guard-jasmine from the command line normally gives me:

> bundle exec guard-jasmine
Guard::Jasmine starts Unicorn spec server on port 62830 in test environment (coverage off).
Waiting for Jasmine test runner at http://localhost:62830/jasmine
Run all Jasmine suites
Run Jasmine suite at http://localhost:62830/jasmine
Cannot decode JSON from PhantomJS runner

Then I tried with the debugger:

> bundle exec guard-jasmine-debug 
TypeError: Type error
TypeError: Type error
TypeError: Type error
TypeError: Type error
TypeError: Type error
{"passed":true,"stats":{"failures":0,"specs":252,"time":5.493},"suites":[{"description":"getOrderString","passed":true,"specs":[],"suites":[{"description":"for table","passed":true,"specs":[{"description":"should return sorting string for ascending sorting","passed":true},{"description":"should return sorting string for descending sorting","passed":true},{"description":"should return empty string if there's no elements with .sorting_asc and .sorting_desc class names","passed":true}],"suites":[]},{"description":"for select","passed":true,"specs":[{"description":"returns \"number asc\" for first option","passed":true},{"description":"returns \"price desc\" for second option","passed":true}],"suites":[]}]},{"description":"ProjectAccessCtrl","passed":true,"specs":[{"description":"should set the project id","passed":true},{"description":"should return 'ajax-activity' application class if save in progress","passed":true},{"description":"should set 'selectableProperties'","passed":true},{"description":"should set 'allCompanies'","passed":true},{"description":"should set 'groups'","passed":true}],"suites":[{"description":"#deleteGroup","passed":true,"specs":[{"description":"should set saveInProgress flag","passed":true},{"description":"should send a delete request","passed":true},{"description":"should remove group on success","passed":true}],"suites":[]}]},{"description":"ProjectAccessEditDialogCtrl","passed":true,"specs":[],"suites":[{"description":"#saveGroup","passed":true,"specs":[{"description":"should save existing group","passed":true},{"description":"should save new group","passed":true}],"suites":[]},{"description":"#saveExisting","passed":true,"specs":[{"description":"should set saveInProgress flag for parent scope","passed":true},{"description":"should send put request with given data","passed":true}],"suites":[{"description":"on success","passed":true,"specs":[{"description":"should update group","passed":true},{"description":"should reset saveInProgress flag for parent scope","passed":true}],"suites":[]}]},{"description":"#saveNew","passed":true,"specs":[{"description":"should set saveInProgress flag for parent scope","passed":true},{"description":"should send post request with given data","passed":true}],"suites":[{"description":"on success","passed":true,"specs":[{"description":"should add group","passed":true},{"description":"should reset saveInProgress flag for parent scope","passed":true}],"suites":[]}]},{"description":"sorting","passed":true,"specs":[{"description":"should set default sorting options","passed":true}],"suites":[{"description":"#propertyOrderValue","passed":true,"specs":[{"description":"should return 'natural' value of the property","passed":true}],"suites":[]},{"description":"#changeSorting","passed":true,"specs":[{"description":"should toggle sort direction for the same column","passed":true},{"description":"should change the sorting options for a new column","passed":true}],"suites":[]},{"description":"#sortingClass","passed":true,"specs":[{"description":"should inlude sorting info if the column matches current sorting (desc)","passed":true},{"description":"should include sorting info if the column matches current sorting (asc)","passed":true},{"description":"should be blank if the column doesn't match","passed":true}],"suites":[]}]}]},{"description":"ProjectAccessGroupCtrl","passed":true,"specs":[{"description":"should save scope in group object","passed":true},{"description":"should return 'ajax-activity' group class if save in progress","passed":true},{"description":"currentCompanies should return all companies with group's company_ids","passed":true},{"description":"should initialize addedCompanies with empty array","passed":true},{"description":"should initialize removedCompanies with empty array","passed":true},{"description":"#invalidateSelectableCompanies should reset selectableCompanies","passed":true},{"description":"#getSelectableCompanyNames should return names of selectable companies","passed":true},{"description":"should push company to removed","passed":true},{"description":"should invalidate selectable companies","passed":true},{"description":"#deleteGroup should call parent's #deleteGroup and pass in current group","passed":true},{"description":"@propertyPluralForms should contain plural form of word 'property'","passed":true}],"suites":[{"description":"#isModified","passed":true,"specs":[{"description":"should return false if no companies were added and removed","passed":true},{"description":"should return true if any company added","passed":true},{"description":"should return true if any company removed","passed":true}],"suites":[]},{"description":"#getSelectableCompanies","passed":true,"specs":[{"description":"should return all companies minus currently selected companies","passed":true},{"description":"should save result to scope","passed":true}],"suites":[]},{"description":"#tryToAddCompanyByName","passed":true,"specs":[{"description":"should add matching company","passed":true},{"description":"should return empty string if company matched","passed":true},{"description":"should return 'null' if company not found","passed":true}],"suites":[]},{"description":"#isCurrentCompany","passed":true,"specs":[{"description":"should retrn false if company is not current","passed":true},{"description":"should return true if company is current","passed":true}],"suites":[]},{"description":"#isAddedCompany","passed":true,"specs":[{"description":"should retrn false if company is not current","passed":true},{"description":"should return true if company is current","passed":true}],"suites":[]},{"description":"#isRemovedCompany","passed":true,"specs":[{"description":"should retrn false if company is not current","passed":true},{"description":"should return true if company is current","passed":true}],"suites":[]},{"description":"#getCompanyStatus","passed":true,"specs":[{"description":"should return 'current' if company was not added and removed","passed":true},{"description":"should return 'added' if company was added","passed":true},{"description":"should return 'removed' if company was removed","passed":true}],"suites":[]},{"description":"#addCompany","passed":true,"specs":[],"suites":[{"description":"already added","passed":true,"specs":[{"description":"should not add company if it's already added","passed":true}],"suites":[]},{"description":"not added","passed":true,"specs":[{"description":"should add company to the current","passed":true},{"description":"should add company to the added","passed":true},{"description":"should reset selectableCompanies","passed":true}],"suites":[{"description":"with other copmanies already added","passed":true,"specs":[{"description":"should preserve other companies in current","passed":true},{"description":"should preserve other companies in added","passed":true}],"suites":[]}]}]},{"description":"#toggleCompany","passed":true,"specs":[],"suites":[{"description":"added company","passed":true,"specs":[{"description":"should remove company from current","passed":true},{"description":"should remove company from added","passed":true}],"suites":[]},{"description":"removed company","passed":true,"specs":[{"description":"should remove company from removed","passed":true}],"suites":[]}]},{"description":"#resetCompanies","passed":true,"specs":[{"description":"should reset addedCompanies","passed":true},{"description":"should exclude removed companies from currentCompanies","passed":true},{"description":"should reset removedCompanies","passed":true},{"description":"should invalidate selectable companies","passed":true}],"suites":[]},{"description":"#save","passed":true,"specs":[{"description":"should construct the 'add' part of allocations array","passed":true},{"description":"should construct the 'remove' part of allocations array","passed":true},{"description":"should send put request to the update_url","passed":true}],"suites":[]}]},{"description":"ngConfirm","passed":true,"specs":[{"description":"should ask user for a confirmation","passed":true},{"description":"should invoke ng-on-confirm if user answers 'Yes'","passed":true}],"suites":[]},{"description":"bootstrapModal","passed":true,"specs":[],"suites":[{"description":"#init(data)","passed":true,"specs":[{"description":"should trigger load event on click","passed":true},{"description":"should call #modalHeader to set header","passed":true},{"description":"should call #modalFooter to set footer","passed":true},{"description":"should call #setProgressControlFunctions to set progress control functions","passed":true},{"description":"should call #setContentControlFunction to set content control functions","passed":true},{"description":"should return valid modal html","passed":true}],"suites":[]},{"description":"#modalHeader(title)","passed":true,"specs":[{"description":"should return valid header html","passed":true}],"suites":[]},{"description":"#modalFooter(text)","passed":true,"specs":[{"description":"should return valid footer html","passed":true}],"suites":[]},{"description":"modal functions","passed":true,"specs":[],"suites":[{"description":"#successLoad()","passed":true,"specs":[{"description":"should hide progress bar","passed":true}],"suites":[]},{"description":"#errorLoad()","passed":true,"specs":[{"description":"should hide progress bar and show message about error","passed":true}],"suites":[]},{"description":"#setContent(content)","passed":true,"specs":[{"description":"should append modal body with content","passed":true},{"description":"should call expandForm","passed":true}],"suites":[]},{"description":"#expandForm(content)","passed":true,"specs":[{"description":"should expand form on whole modal popup","passed":true},{"description":"should move submit button to modal footer","passed":true}],"suites":[]}]}]},{"description":"AddClassOnSuccess","passed":true,"specs":[{"description":"should add class to target on ajax:success","passed":true}],"suites":[]},{"description":"ajaxModalHtml","passed":true,"specs":[{"description":"should trigger load event on click","passed":true},{"description":"should init bootstrap modalBody object","passed":true},{"description":"should init modal with response if it includes modal HTML","passed":true},{"description":"should trigger bootstrap's modal() function","passed":true},{"description":"should show the popup","passed":true},{"description":"should set content on ajax success","passed":true},{"description":"should perform show message on ajax error","passed":true}],"suites":[]},{"description":"ajaxModalImage","passed":true,"specs":[{"description":"should trigger load event on click","passed":true},{"description":"should prepare image wrapped in link","passed":true},{"description":"should init bootstrap modalBody object","passed":true},{"description":"should show the popup","passed":true},{"description":"should set content removing progress for modal popup","passed":true},{"description":"should trigger bootstrap's modal() function","passed":true}],"suites":[{"description":"#linkedImage","passed":true,"specs":[{"description":"should return valid modal image html","passed":true}],"suites":[]}]},{"description":"autocompleteWith","passed":true,"specs":[{"description":"should assign typeahead to the target element","passed":true},{"description":"should asynchronously get autocomplete data from given url","passed":true},{"description":"should render dropdown menu on completion","passed":true}],"suites":[{"description":"delay on user unput","passed":true,"specs":[{"description":"should cancel current request","passed":true},{"description":"should setup timer with new request","passed":true}],"suites":[]}]},{"description":"CheckAll","passed":true,"specs":[],"suites":[{"description":"with a checkbox","passed":true,"specs":[{"description":"should check all checkboxes in a table","passed":true},{"description":"should uncheck all checkboxes in a table","passed":true},{"description":"should be automatically checked when all checkboxes selected","passed":true},{"description":"should be automatically unchecked when all checkboxes deselected","passed":true}],"suites":[{"description":"checking by selector","passed":true,"specs":[{"description":"unchecks #check-1 which does not match","passed":true},{"description":"checks #check-2 which matches","passed":true}],"suites":[]}]},{"description":"selecting by clicking a button/link","passed":true,"specs":[{"description":"selects only visible items","passed":true},{"description":"always unselectes hidden items","passed":true}],"suites":[]}]},{"description":"ClassToggler","passed":true,"specs":[{"description":"should throw an error if data-toggles-class attr is missing","passed":true},{"description":"should toggle the controlled class when controller is clicked","passed":true},{"description":"should toggle the class of itself when toggle-target attribute is omitted","passed":true}],"suites":[]},{"description":"customizeFields","passed":true,"specs":[{"description":"should show target table cell","passed":true},{"description":"should hide target table cell","passed":true},{"description":"triggers customized-table-updated event","passed":true}],"suites":[]},{"description":"datatableDateSort","passed":true,"specs":[{"description":"compares based on DD/MM/YYYY format","passed":true}],"suites":[]},{"description":"Datatable's formsort","passed":true,"specs":[{"description":"compares plain text normally","passed":true},{"description":"compares select html input using selected item only","passed":true}],"suites":[]},{"description":"Datatable's naturalsort","passed":true,"specs":[{"description":"compares based on natural","passed":true}],"suites":[{"description":"#parserFunc","passed":true,"specs":[{"description":"should return the correct value from the parsing function","passed":true},{"description":"should put strings with alpha at the top","passed":true},{"description":"should sort by alpha beginning","passed":true}],"suites":[]}]},{"description":"Datatable's numeric sort by the data-numeric attribute","passed":true,"specs":[{"description":"parses integers","passed":true},{"description":"parses floats","passed":true},{"description":"parses esge cases","passed":true}],"suites":[]},{"description":"datatable","passed":true,"specs":[{"description":"should add class after init","passed":true},{"description":"should re-init if table has class 'datatable-reinit'","passed":true},{"description":"should sort according to initial sort direction","passed":true},{"description":"should sort after clicking","passed":true},{"description":"should not sort disabled","passed":true}],"suites":[]},{"description":"excelExport","passed":true,"specs":[{"description":"should generate new form with url of 'data-exports-as-excel' attribute","passed":true},{"description":"should gather all inputs from body with the name of 'export_ids[]'","passed":true},{"description":"should submit the generated form","passed":true},{"description":"should append all inputs of target form","passed":true},{"description":"should cleanup old forms leaving only one in document tree","passed":true},{"description":"should evalate value of data-order and pass the result as order param","passed":true}],"suites":[]},{"description":"fileUploadForm","passed":true,"specs":[{"description":"initializes form with fileupload","passed":true}],"suites":[{"description":"if user attached file","passed":true,"specs":[{"description":"saves it for future submission as data-fileupload-file","passed":true},{"description":"submits form with fileupload plugin","passed":true}],"suites":[{"description":"events","passed":true,"specs":[{"description":"triggers ajax:beforeSend before sendding","passed":true},{"description":"triggers ajax:beforeSend.rails before sendding","passed":true},{"description":"triggers ajax events on completion","passed":true}],"suites":[]}]}]},{"description":"fileInput","passed":true,"specs":[{"description":"should customize file input with replacement","passed":true},{"description":"should remove the replacement","passed":true}],"suites":[]},{"description":"FillValue","passed":true,"specs":[{"description":"should set the value when clicked","passed":true}],"suites":[]},{"description":"FormUpdate","passed":true,"specs":[{"description":"should POST when anything is changed on the form","passed":true},{"description":"should update the target HTML when the result is received","passed":true},{"description":"should automatically remove submit-in-progress attribute on request success","passed":true},{"description":"should automatically remove submit-in-progress attribute on request error","passed":true},{"description":"should automatically set submit-in-progress attribute on submit","passed":true},{"description":"should replace target element with contents of received HTML","passed":true}],"suites":[]},{"description":"googleMap","passed":true,"specs":[{"description":"should save previous html to the data attribute","passed":true},{"description":"should build the new google map object","passed":true},{"description":"should expose API as the data attribute","passed":true}],"suites":[{"description":"API","passed":true,"specs":[{"description":"should include map","passed":true},{"description":"should include markers","passed":true}],"suites":[{"description":"markers","passed":true,"specs":[{"description":"should allow to add marker","passed":true},{"description":"should assign marker to the map","passed":true},{"description":"should create associated infoWindow","passed":true},{"description":"should allow to center on markers","passed":true}],"suites":[]}]}]},{"description":"HtmlToggler","passed":true,"specs":[{"description":"should throw an error if data-toggle-html attr is missing","passed":true},{"description":"should change the html to the new html when old html is the current one","passed":true},{"description":"should change the default html to the data attribute after first click","passed":true},{"description":"should change the html to the old html when new html is the current one","passed":true}],"suites":[]},{"description":"infiniteScroll","passed":true,"specs":[{"description":"throws an error if more than 1 elements with infinite scrolling enabled exists","passed":true},{"description":"triggers scrollTop() each time the document is scrolled","passed":true}],"suites":[{"description":"InfiniteScroll","passed":true,"specs":[{"description":"total == 5","passed":true},{"description":"perPaage == 2","passed":true},{"description":"moreURL == /load-more","passed":true},{"description":"itemsSelector == tbody","passed":true}],"suites":[{"description":"items","passed":true,"specs":[],"suites":[{"description":"when data-items-selector is present","passed":true,"specs":[{"description":"returns children of given selector","passed":true}],"suites":[]},{"description":"when data-items-selector is omitted","passed":true,"specs":[{"description":"returns children of element","passed":true}],"suites":[]}]},{"description":"bottomEdgePosition","passed":true,"specs":[{"description":"== top position + height - window height","passed":true}],"suites":[]},{"description":"loadedCount","passed":true,"specs":[{"description":"== 2","passed":true}],"suites":[]},{"description":"onScroll","passed":true,"specs":[],"suites":[{"description":"when reached bottom edge","passed":true,"specs":[{"description":"triggers loadMore()","passed":true}],"suites":[]},{"description":"when bottom edge not reached","passed":true,"specs":[{"description":"does not triggers loadMore()","passed":true}],"suites":[]}]},{"description":"loadMore","passed":true,"specs":[{"description":"triggers loadStarted()","passed":true},{"description":"sends load more data request","passed":true},{"description":"triggers loadEnded when request finished","passed":true}],"suites":[{"description":"when everything loaded","passed":true,"specs":[{"description":"does nothing","passed":true}],"suites":[]},{"description":"when load in progress","passed":true,"specs":[{"description":"does nothing","passed":true}],"suites":[]},{"description":"when table is invisible","passed":true,"specs":[{"description":"does nothing","passed":true}],"suites":[]}]},{"description":"loadStarted","passed":true,"specs":[{"description":"sets loadInProgress = true","passed":true},{"description":"shows feedback","passed":true}],"suites":[]},{"description":"loadEnded","passed":true,"specs":[{"description":"sets loadInProgress = false","passed":true},{"description":"hides feedback","passed":true},{"description":"appends content after the last item","passed":true}],"suites":[]}]}]},{"description":"initWidget","passed":true,"specs":[{"description":"should init target widget","passed":true}],"suites":[]},{"description":"InputsVisibility","passed":true,"specs":[{"description":"should throw an error if data-toggles-by-group attr is missing","passed":true},{"description":"should throw an error if data-radio-toggler attr is missing","passed":true},{"description":"should automatically hide the source element when radio button deselected","passed":true},{"description":"should automatically show the source element when radio button selected","passed":true}],"suites":[]},{"description":"pageFilter","passed":true,"specs":[{"description":"should hide the item when search term doesnt match","passed":true},{"description":"should show the item when search term matches","passed":true}],"suites":[{"description":"highlighting","passed":true,"specs":[{"description":"hightlights found terms","passed":true},{"description":"unhighlights everything before search","passed":true}],"suites":[]}]},{"description":"remoteForm","passed":true,"specs":[{"description":"replaces data-remote-form-success element on 200 status","passed":true},{"description":"replaces data-remote-form-fail element on 422 status","passed":true}],"suites":[]},{"description":"RemoveClassOnSuccess","passed":true,"specs":[{"description":"should remove class from target on ajax:success","passed":true}],"suites":[]},{"description":"removeOnAjax","passed":true,"specs":[{"description":"should remove element on ajax with custom finder method","passed":true},{"description":"should remove element on ajax with global selector","passed":true}],"suites":[]},{"description":"reopenModalForms","passed":true,"specs":[{"description":"should reopen modal window with error inside","passed":true}],"suites":[]},{"description":"replaceOnSuccess","passed":true,"specs":[{"description":"should replace target element with new data on ajax:success","passed":true}],"suites":[]},{"description":"SendReplace","passed":true,"specs":[{"description":"should submit correct data to the correct url on click","passed":true},{"description":"should submit to href attribute if no sendreplace-url is provided","passed":true},{"description":"should uses GET method","passed":true},{"description":"should submit on custom event","passed":true},{"description":"should update the target HTML when the result is received","passed":true},{"description":"should optionally scroll to the new content","passed":true}],"suites":[]},{"description":"shortlist","passed":true,"specs":[],"suites":[{"description":"creating new shortlist","passed":true,"specs":[{"description":"sends POST /shortlists request","passed":true},{"description":"appends new shortlist on success","passed":true},{"description":"shows error message when failed","passed":true}],"suites":[{"description":"multiple shortlisted objects","passed":true,"specs":[{"description":"sends POST /shortlists/456/shortlist_items/mass_crete request","passed":true}],"suites":[]}]},{"description":"shortlisting object","passed":true,"specs":[{"description":"sends POST /shortlists/456/shortlist_items request","passed":true},{"description":"updates data-shortlist-item-id","passed":true},{"description":"increases the counter","passed":true},{"description":"preserves the html of the counter","passed":true}],"suites":[]},{"description":"removing object from shortlist","passed":true,"specs":[{"description":"sends DELETE /shortlists/456/shortlist_items/125 request","passed":true},{"description":"removes data-shortlist-item-id","passed":true},{"description":"decreases the counter","passed":true}],"suites":[]}]},{"description":"showsPopover","passed":true,"specs":[{"description":"should apply custom css class","passed":true},{"description":"should show the remote content from the popover","passed":true},{"description":"should hide the popover when clicked somewhere on a page","passed":true},{"description":"should not hide the popover when clicked within a popover","passed":true},{"description":"should hide the popover when clicked within a popover but trigger wants to hide it","passed":true},{"description":"should not hide the popover when clicked element is removed from DOM (click, replace html)","passed":true},{"description":"should hide the popover that is left without the related trigger","passed":true},{"description":"should hide existing popover when opening a second one","passed":true},{"description":"should not hide existing popover when opening a second one which is within opened popover","passed":true},{"description":"should hide existing popover when reopening a second one","passed":true},{"description":"should trigger 'shown' event when opening","passed":true}],"suites":[{"description":"dismissing popover on ajax","passed":true,"specs":[{"description":"should hide popover on ajax:success","passed":true},{"description":"should not hide popover when expecting another event","passed":true}],"suites":[]},{"description":"positioning","passed":true,"specs":[{"description":"should add negative margin when popover is opened near the right window edge","passed":true}],"suites":[]}]},{"description":"sorts","passed":true,"specs":[{"description":"sorts by name asc","passed":true},{"description":"sorts by name desc","passed":true},{"description":"sorts by price asc","passed":true},{"description":"sorts by price desc","passed":true}],"suites":[]},{"description":"submitsInputs","passed":true,"specs":[{"description":"should submit given inputs via AJAX","passed":true}],"suites":[]},{"description":"submits","passed":true,"specs":[{"description":"should submit form on click","passed":true}],"suites":[]},{"description":"SyncInput","passed":true,"specs":[{"description":"should be initialised with an existing value","passed":true},{"description":"should set the value on the target","passed":true},{"description":"should trigger change event","passed":true}],"suites":[]}]}
TypeError: Type error
TypeError: Type error
TypeError: Type error
TypeError: Type error
TypeError: Type error
TypeError: Type error
TypeError: Type error
TypeError: Type error
TypeError: Type error
TypeError: Type error
{"error":"The Jasmine reporter is not available!\n\n\nJasmine 1.3.1 revision 1354556913finished in 5.507s\nNo try/catch\nPassing 252 specs\ngetOrderString\nfor table\nshould return sorting string for ascending sorting\nshould return sorting string for descending sorting\nshould return empty string if there's no elements with .sorting_asc and .sorting_desc class names\nfor select\nreturns \"number asc\" for first option\nreturns \"price desc\" for second option\nProjectAccessCtrl\nshould set the project id\nshould return 'ajax-activity' application class if save in progress\nshould set 'selectableProperties'\nshould set 'allCompanies'\nshould set 'groups'\n#deleteGroup\nshould set saveInProgress flag\nshould send a delete request\nshould remove group on success\nProjectAccessEditDialogCtrl\n#saveGroup\nshould save existing group\nshould save new group\n#saveExisting\nshould set saveInProgress flag for parent scope\nshould send put request with given data\non success\nshould update group\nshould reset saveInProgress flag for parent scope\n#saveNew\nshould set saveInProgress flag for parent scope\nshould send post request with given data\non success\nshould add group\nshould reset saveInProgress flag for parent scope\nsorting\nshould set default sorting options\n#propertyOrderValue\nshould return 'natural' value of the property\n#changeSorting\nshould toggle sort direction for the same column\nshould change the sorting options for a new column\n#sortingClass\nshould inlude sorting info if the column matches current sorting (desc)\nshould include sorting info if the column matches current sorting (asc)\nshould be blank if the column doesn't match\nProjectAccessGroupCtrl\nshould save scope in group object\nshould return 'ajax-activity' group class if save in progress\ncurrentCompanies should return all companies with group's company_ids\nshould initialize addedCompanies with empty array\nshould initialize removedCompanies with empty array\n#isModified\nshould return false if no companies were added and removed\nshould return true if any company added\nshould return true if any company removed\n#invalidateSelectableCompanies should reset selectableCompanies\n#getSelectableCompanies\nshould return all companies minus currently selected companies\nshould save result to scope\n#getSelectableCompanyNames should return names of selectable companies\n#tryToAddCompanyByName\nshould add matching company\nshould return empty string if company matched\nshould return 'null' if company not found\n#isCurrentCompany\nshould retrn false if company is not current\nshould return true if company is current\n#isAddedCompany\nshould retrn false if company is not current\nshould return true if company is current\n#isRemovedCompany\nshould retrn false if company is not current\nshould return true if company is current\n#getCompanyStatus\nshould return 'current' if company was not added and removed\nshould return 'added' if company was added\nshould return 'removed' if company was removed\n#addCompany\nalready added\nshould not add company if it's already added\nnot added\nshould add company to the current\nwith other copmanies already added\nshould preserve other companies in current\nshould preserve other companies in added\nshould add company to the added\nshould reset selectableCompanies\n#toggleCompany\nadded company\nshould remove company from current\nshould remove company from added\nremoved company\nshould remove company from removed\nshould push company to removed\nshould invalidate selectable companies\n#resetCompanies\nshould reset addedCompanies\nshould exclude removed companies from currentCompanies\nshould reset removedCompanies\nshould invalidate selectable companies\n#deleteGroup should call parent's #deleteGroup and pass in current group\n@propertyPluralForms should contain plural form of word 'property'\n#save\nshould construct the 'add' part of allocations array\nshould construct the 'remove' part of allocations array\nshould send put request to the update_url\nngConfirm\nshould ask user for a confirmation\nshould invoke ng-on-confirm if user answers 'Yes'\nbootstrapModal\n#init(data)\nshould trigger load event on click\nshould call #modalHeader to set header\nshould call #modalFooter to set footer\nshould call #setProgressControlFunctions to set progress control functions\nshould call #setContentControlFunction to set content control functions\nshould return valid modal html\n#modalHeader(title)\nshould return valid header html\n#modalFooter(text)\nshould return valid footer html\nmodal functions\n#successLoad()\nshould hide progress bar\n#errorLoad()\nshould hide progress bar and show message about error\n#setContent(content)\nshould append modal body with content\nshould call expandForm\n#expandForm(content)\nshould expand form on whole modal popup\nshould move submit button to modal footer\nAddClassOnSuccess\nshould add class to target on ajax:success\najaxModalHtml\nshould trigger load event on click\nshould init bootstrap modalBody object\nshould init modal with response if it includes modal HTML\nshould trigger bootstrap's modal() function\nshould show the popup\nshould set content on ajax success\nshould perform show message on ajax error\najaxModalImage\nshould trigger load event on click\nshould prepare image wrapped in link\nshould init bootstrap modalBody object\nshould show the popup\nshould set content removing progress for modal popup\nshould trigger bootstrap's modal() function\n#linkedImage\nshould return valid modal image html\nautocompleteWith\nshould assign typeahead to the target element\nshould asynchronously get autocomplete data from given url\nshould render dropdown menu on completion\ndelay on user unput\nshould cancel current request\nshould setup timer with new request\nCheckAll\nwith a checkbox\nshould check all checkboxes in a table\nshould uncheck all checkboxes in a table\nshould be automatically checked when all checkboxes selected\nshould be automatically unchecked when all checkboxes deselected\nchecking by selector\nunchecks #check-1 which does not match\nchecks #check-2 which matches\nselecting by clicking a button/link\nselects only visible items\nalways unselectes hidden items\nClassToggler\nshould throw an error if data-toggles-class attr is missing\nshould toggle the controlled class when controller is clicked\nshould toggle the class of itself when toggle-target attribute is omitted\ncustomizeFields\nshould show target table cell\nshould hide target table cell\ntriggers customized-table-updated event\ndatatableDateSort\ncompares based on DD/MM/YYYY format\nDatatable's formsort\ncompares plain text normally\ncompares select html input using selected item only\nDatatable's naturalsort\ncompares based on natural\n#parserFunc\nshould return the correct value from the parsing function\nshould put strings with alpha at the top\nshould sort by alpha beginning\nDatatable's numeric sort by the data-numeric attribute\nparses integers\nparses floats\nparses esge cases\ndatatable\nshould add class after init\nshould re-init if table has class 'datatable-reinit'\nshould sort according to initial sort direction\nshould sort after clicking\nshould not sort disabled\nexcelExport\nshould generate new form with url of 'data-exports-as-excel' attribute\nshould gather all inputs from body with the name of 'export_ids[]'\nshould submit the generated form\nshould append all inputs of target form\nshould cleanup old forms leaving only one in document tree\nshould evalate value of data-order and pass the result as order param\nfileUploadForm\ninitializes form with fileupload\nif user attached file\nsaves it for future submission as data-fileupload-file\nsubmits form with fileupload plugin\nevents\ntriggers ajax:beforeSend before sendding\ntriggers ajax:beforeSend.rails before sendding\ntriggers ajax events on completion\nfileInput\nshould customize file input with replacement\nshould remove the replacement\nFillValue\nshould set the value when clicked\nFormUpdate\nshould POST when anything is changed on the form\nshould update the target HTML when the result is received\nshould automatically remove submit-in-progress attribute on request success\nshould automatically remove submit-in-progress attribute on request error\nshould automatically set submit-in-progress attribute on submit\nshould replace target element with contents of received HTML\ngoogleMap\nshould save previous html to the data attribute\nshould build the new google map object\nshould expose API as the data attribute\nAPI\nshould include map\nshould include markers\nmarkers\nshould allow to add marker\nshould assign marker to the map\nshould create associated infoWindow\nshould allow to center on markers\nHtmlToggler\nshould throw an error if data-toggle-html attr is missing\nshould change the html to the new html when old html is the current one\nshould change the default html to the data attribute after first click\nshould change the html to the old html when new html is the current one\ninfiniteScroll\nthrows an error if more than 1 elements with infinite scrolling enabled exists\ntriggers scrollTop() each time the document is scrolled\nInfiniteScroll\ntotal == 5\nperPaage == 2\nmoreURL == /load-more\nitemsSelector == tbody\nitems\nwhen data-items-selector is present\nreturns children of given selector\nwhen data-items-selector is omitted\nreturns children of element\nbottomEdgePosition\n== top position + height - window height\nloadedCount\n== 2\nonScroll\nwhen reached bottom edge\ntriggers loadMore()\nwhen bottom edge not reached\ndoes not triggers loadMore()\nloadMore\nwhen everything loaded\ndoes nothing\nwhen load in progress\ndoes nothing\nwhen table is invisible\ndoes nothing\ntriggers loadStarted()\nsends load more data request\ntriggers loadEnded when request finished\nloadStarted\nsets loadInProgress = true\nshows feedback\nloadEnded\nsets loadInProgress = false\nhides feedback\nappends content after the last item\ninitWidget\nshould init target widget\nInputsVisibility\nshould throw an error if data-toggles-by-group attr is missing\nshould throw an error if data-radio-toggler attr is missing\nshould automatically hide the source element when radio button deselected\nshould automatically show the source element when radio button selected\npageFilter\nshould hide the item when search term doesnt match\nshould show the item when search term matches\nhighlighting\nhightlights found terms\nunhighlights everything before search\nremoteForm\nreplaces data-remote-form-success element on 200 status\nreplaces data-remote-form-fail element on 422 status\nRemoveClassOnSuccess\nshould remove class from target on ajax:success\nremoveOnAjax\nshould remove element on ajax with custom finder method\nshould remove element on ajax with global selector\nreopenModalForms\nshould reopen modal window with error inside\nreplaceOnSuccess\nshould replace target element with new data on ajax:success\nSendReplace\nshould submit correct data to the correct url on click\nshould submit to href attribute if no sendreplace-url is provided\nshould uses GET method\nshould submit on custom event\nshould update the target HTML when the result is received\nshould optionally scroll to the new content\nshortlist\ncreating new shortlist\nsends POST /shortlists request\nappends new shortlist on success\nshows error message when failed\nmultiple shortlisted objects\nsends POST /shortlists/456/shortlist_items/mass_crete request\nshortlisting object\nsends POST /shortlists/456/shortlist_items request\nupdates data-shortlist-item-id\nincreases the counter\npreserves the html of the counter\nremoving object from shortlist\nsends DELETE /shortlists/456/shortlist_items/125 request\nremoves data-shortlist-item-id\ndecreases the counter\nshowsPopover\nshould apply custom css class\nshould show the remote content from the popover\nshould hide the popover when clicked somewhere on a page\nshould not hide the popover when clicked within a popover\nshould hide the popover when clicked within a popover but trigger wants to hide it\nshould not hide the popover when clicked element is removed from DOM (click, replace html)\nshould hide the popover that is left without the related trigger\nshould hide existing popover when opening a second one\nshould not hide existing popover when opening a second one which is within opened popover\nshould hide existing popover when reopening a second one\nshould trigger 'shown' event when opening\ndismissing popover on ajax\nshould hide popover on ajax:success\nshould not hide popover when expecting another event\npositioning\nshould add negative margin when popover is opened near the right window edge\nsorts\nsorts by name asc\nsorts by name desc\nsorts by price asc\nsorts by price desc\nsubmitsInputs\nshould submit given inputs via AJAX\nsubmits\nshould submit form on click\nSyncInput\nshould be initialised with an existing value\nshould set the value on the target\nshould trigger change event\n"}

All the specs are passing with the jasminerice but fail when run from the command line.

Using:


# https://github.com/netzpirat/guard-jasmine/issues/150
GIT
  remote: git://github.com/guard/guard.git
  revision: f52f3637a2ac4fd0f492a1d969545f87547710d0
  specs:
    guard (2.0.3)
      formatador (>= 0.2.4)
      listen (~> 2.0)
      lumberjack (~> 1.0)
      pry (>= 0.9.12)
      thor (>= 0.18.1)

    guard-jasmine (1.18.3)
    rails (4.0.0)
netzpirat commented 11 years ago

The command guard-jasmine-debug executes the PhantomJS runner which in turn should return a single JSON object, but your posted output shows some errors, the valid return object, some more errors and finally a timeout response. Did the specs run fine before it occurred for the first time? You can find the commit that broke the specs with something like git bisect run guard-jasmine.

dnagir commented 11 years ago

Yeah the specs were fine until I updated jasminerice (and guard, guard-jasmine). So it is not one of the commits the broke the specs. It looks like the update of guard-jasmine broke it.

So I don't think that searching for broken commit in our repo would be of any benefit. It will be the commit where I updated the guard-jasmine.

netzpirat commented 11 years ago

From what version did you upgrade?

netzpirat commented 11 years ago

Closed since lack of response.