2014-02-19 83 views
0

我剛剛抓住了最新版本的functional testing plugin,它的重點至少從文檔中改變了一下。這不是一件壞事。 HtmlUnit集成很好。但是現在,文檔中沒有關於Web服務的RESTful測試的任何內容。但是,我以前用functionaltestplugin.FunctionalTestCase仍然有效,這很好。Grails功能測試插件和REST風格的測試

例如:

void testCertifyEmployerCertifierNotFound() { 

     post('/employerCertification/certifyEmployer') { 
     headers['Content-Type'] = 'application/json' 
     body { 
      """ 
      { 
      'employerName': 'ACME', 
      'certifierExteralId': '1234556', 
      'certifyingUserId': '123445' 
      } 
      """ 
     } 
     } 
     assertStatus 200 
     assertContentType "application/json" 
     def model = this.response.contentAsString 
     def map = JSON.parse(model) 
     assertFalse(map.success) 
     assertNotNull(map.errorCode) 
     assertTrue(map.errorCode == EmployerCertificationService.ERROR_RESPONSE.CERTIFIER_NOT_FOUND.toString()) 
} 

是這個插件仍然是「事實上的」插件使用的功能性Web服務測試及以上仍然有效我的做法?

回答

0

我剛剛試圖同時使用functional testing plugin和​​與幾乎當前的Grails 2.4.2,我很遺憾地報告他們都是borked。 :(

功能測試插件已經幾乎放棄了至少9個月了。在2013年12月一個critical bug,使測試所有使用這個插件不工作有報道寫的。有沒有響應從插件開發者關於它的那一天,我寫的。而作爲這個開發商,馬克·帕爾默switched to iOS development and consultancy in August 2014我不相信這個問題將永遠得到解決。

WebTest的插件已上次更新超過3多年前,它「需要Grails 1.2.RC2 +」 un運行時丟失webtest.jar的醜陋錯誤,看起來這個插件只是沒有更新到當前的Grails版本。另外它的語法不是很Groovy,也不是很好。

幸運的是Geb integration for Grails plugin應該可以與當前的Grails版本一起工作。 :)其實在中只有與Grails 2.3.1+一起工作,截至寫這些文字已經在2014年6月上次更新了,它的example tests project已經更新到Grails 2.4.3,幾天前已經發布,所以它是非常新的。但是我還沒有使用過這個項目。另外看看是我的示例代碼我不確定它是RESTful API測試的最佳選擇 - 它更像是一個GUI Web應用程序測試工具..

0

雖然可能不是很「grails風格」,但我認爲它應該可以使用spring上下文啓動整個堆棧,並使用apache HttpClient運行集成休眠測試。

3

如果您的目標是測試REST請求/響應我建議您使用rest client builder plugin。您不需要複雜的瀏覽器同步插件。它使用的只是兩個步驟安裝後非常簡單:

活動添加到在腳本管理功能測試/ _Events.groovy:這是用來勾在運行某些事件的系統文件大盤。只需複製並粘貼此片段:

eventAllTestsStart = { 
    if (getBinding().variables.containsKey("functionalTests")) { 
     functionalTests << "functional" 
    } 
} 

現在你可以在測試/功能文件夾中創建功能測試,rememeber到結束的文件名與規格,Grails將找不到任何測試,如果忘了這。 這是一個例子:

import grails.plugins.rest.client.RestBuilder 
import spock.lang.Specification 

    class AuthenticationSpec extends Specification { 

     String baseUrl = "http://localhost:8080/grouply-backend" 

     void "test login wrong credentials"() { 

      given: 
      RestBuilder restBuilder = new RestBuilder() 

      when: "sending wrong credential" 
      def response = restBuilder.post("${baseUrl}/auth/login") { 
      json { 
       username = 'foo' 
       password = 'bar' 
       } 
      } 

      then: "authentication http error should happen" 
      response.status == 401 
     } 
    } 

運行測試與$ grails test-app functional: