2017-01-21 2 views
0

Исходя из Rails, я испытываю трудности с модульными испытаниями в Grails. Что эквивалентно приведенному ниже в Grails?Что такое эквивалент Grails от Rspec?

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, создает объект только один раз, а затем возвращает его, а не возвращать новый экземпляр каждый раз. –

Смежные вопросы