2

我們的應用程序使用jQuery dialogs進行模態彈出。我們正在嘗試爲javascript編寫一些單元測試,其中一部分是創建對話框。我們使用茉莉花和Jasmine Maven plugin。在瀏覽器中運行測試時,一切正常。但是,當我們嘗試運行測試的無頭執行(mvn jasmine:test)時,測試在創建對話框的行上失敗。有錯誤看起來是這樣的:如何在無頭執行期間測試jQuery UI對話框

* TypeError: Cannot find function dialog in object [object Object]. 

發生這種情況就行僅僅是這樣的:

$(element).dialog(popupProperties); 

如果有幫助,我們的pom.xml有這樣的插件:

 <plugin> 
      <groupId>com.github.searls</groupId> 
      <artifactId>jasmine-maven-plugin</artifactId> 
      <version>1.2.0.0</version> 
      <extensions>true</extensions> 
      <executions> 
       <execution> 
       <goals> 
        <goal>test</goal> 
       </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <preloadSources> 
        <source>${project.basedir}/src/main/webapp/resources/jquery.js</source> 
        <source>${project.basedir}/src/main/webapp/resources/jquery-ui.js</source> 
        <source>${project.basedir}/src/main/webapp/resources/angular.js</source> 
        <source>${project.basedir}/src/test/javascript/lib/angular-mocks.js</source> 
        <source>${project.basedir}/src/test/javascript/lib/jasmine-fixture.js</source> 
       </preloadSources> 
       <jsSrcDir>${project.basedir}/src/main/webapp/resources/</jsSrcDir> 
       <jsTestSrcDir>${project.basedir}/src/test/javascript/unit/</jsTestSrcDir> 
      </configuration> 
     </plugin> 

有什麼我們可以做的,以獲得與對話的東西無頭執行工作?

回答

1

我們想出了問題所在。基本上我們的src目錄中的preloadSources被添加兩次到spec runner。它會首先完成所有preoloadSources,然後添加src目錄中的所有內容。所以,jquery.js第二次被添加了第二個jquery-ui.js,因此它不知道dialog是什麼。我們固定它通過改變我們的pom.xml以下內容:

 <plugin> 
      <groupId>com.github.searls</groupId> 
      <artifactId>jasmine-maven-plugin</artifactId> 
      <version>1.2.0.0</version> 
      <extensions>true</extensions> 
      <executions> 
       <execution> 
       <goals> 
        <goal>test</goal> 
       </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <preloadSources> 
        <source>${project.basedir}/src/main/webapp/resources/${ivplugin.client.version}/jquery.js</source> 
        <source>${project.basedir}/src/main/webapp/resources/${ivplugin.client.version}/jquery-ui.js</source> 
        <source>${project.basedir}/src/main/webapp/resources/${ivplugin.client.version}/angular.js</source> 
        <source>${project.basedir}/src/test/javascript/lib/angular-mocks.js</source> 
        <source>${project.basedir}/src/test/javascript/lib/jasmine-fixture.js</source> 
       </preloadSources> 
       <jsSrcDir>${project.basedir}/src/main/webapp/resources/${ivplugin.client.version}/</jsSrcDir> 
       <jsTestSrcDir>${project.basedir}/src/test/javascript/unit/</jsTestSrcDir> 
       <sourceExcludes> 
        <exclude>**/jquery.js</exclude> 
        <exclude>**/jquery-ui.js</exclude> 
        <exclude>**/angular.js</exclude> 
       </sourceExcludes> 
      </configuration> 
     </plugin> 

sourceExcludes阻止它獲取添加第二個時間。這一切看起來像插件的錯誤,但這使我們能夠避開它。