2017-01-21 53 views
0

來自Rails,在Grails中我很難用單元測試。 Grails中的以下內容相當於什麼?Rspec的grails等價物是什麼?

let(:some_variable) { SomeObject.new(name: 'Blabla', ...) }

我要定義一些變量可以在每個測試中使用。此外,我想的對象被保存,如:

def "some test"() { 
    // given variable1 and variable2 

    then: 
    response.json.size() == 2 
} 

所以測試將有兩個變量和響應將產生這兩個對象的數組,大小爲2

+0

你提到的有關變量和響應,但你是什麼操作尋求在這個問題中失蹤。你能詳細解釋一下這個問題嗎? – dmahapatro

回答

1

簡單情況:

@TestFor(SomeController) 
class SomeControllerSpec extends Specification { 
    def "some test"() { 
     given: 
      def var1 = new SomeObject(name:"AAA").save(flush:true) 
      def var2 = new SomeObject(name:"BBB").save(flush:true) 
     when: 
      controller.someAction() 
      // assuming someAction fetches the SomeObject instances 
      // and marshals a JSON Response 
     then: 
      controller.response.json.size() == 2 
    } 
} 

或者是:

@TestFor(SomeController) 
class SomeControllerSpec extends Specification { 

    // var1 and var2 are saved to the DB, and persist across all 
    // the tests in this specification 
    def var1 = new SomeObject(name:"AAA").save(flush:true) 
    def var2 = new SomeObject(name:"BBB").save(flush:true) 

    def "some test"() { 
     when: 
      controller.someAction() 
     then: 
      controller.response.json.size() == 2 
    } 
} 
+0

但'let'允許您在測試中重用此實現。這似乎是你需要在每個例子中重複它。 –

+1

或者將該動作放在規範的setup()階段。還有setup()和cleanup()方法。查看關於測試的Grails文檔部分。 – railsdog

+0

你應該編輯你的答案。並且讓memoization,只創建一次對象然後返回它,而不是每次都返回新的實例。 –

相關問題