2017-01-10 9 views
0

これは私をナットにしてくれます。 2.4.4統合テストはすべて合格となります。 2.5.5へのアップグレードと私はすべての場所の上にこのようなエラーが出る:Grails 2.5.5 w/Spock addTo *()を使用すると統合テストが失敗する

No signature of method: Project.addToMonitorings() is applicable for argument types: (Monitoring) values: [Monitoring : (unsaved)] Possible solutions: getMonitorings() 

私は彼らが再び合格するために統合テストを更新する方法を見つけ出すように見えることはできません。 1対多の関係を持って、私は私のアプリでどこでも、このエラーが出る

class MonitoringServiceSpec extends Specification { 
def monitoringService 

TestDataFactory f // factory that builds objects so we can use them in other tests 

def setup() { 
    f = new TestDataFactory() 
} 

void "results can be limited"() { 
    given: 
     Project p = f.getProject() 
     p.save(flush: true, failOnError: true) 

     def params = new EcosListParams(new GrailsParameterMap ([offset: 0, max:1, sortColumn: 'id', order: 'asc'], null)) 

    when: 
     p.addToMonitorings(f.getMonitoring(p)).save(flush: true, failOnError: true) 
     p.refresh() 

     def results = monitoringService.getProjectMonitorings(params, p.id) 

    then: 
     results.totalCount == 2 
     results.size() == 1 
} 

... 

} 

例(現在の)テスト。彼らは2.4.4で完璧に動作しました。

答えて

0

ここで私はそれを動作させるために何をしなければなりませんでした。データ・ファクトリのgetMonitoringメソッドは、すでにオブジェクトをプロジェクトに追加しました。これは、暗黙のうちにTestDataFactory ADDTO

import groovy.sql.Sql; 
import org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap 

import spock.lang.* 

class MonitoringServiceSpec extends Specification { 
    def f = new TestDataFactory() 
    def proj 

    def sql 
    def dataSource 
    def monitoringService 

    def setup() { 
     sql = new Sql(dataSource); 
     proj = f.getProject().save() 
     Monitoring mon1 = f.getMonitoring(proj).save() 
     Monitoring mon2 = f.getMonitoring(proj).save() 
     // don't need addTo, the getMonitoring method above implicitly adds it to the project 
     proj.save(flush: true, failOnError: true).refresh() 
    } 

    void "results can be limited"() { 
     given: 
      def params = new EcosListParams(new GrailsParameterMap ([offset: 0, max:1, sortColumn: 'id', order: 'asc'], null)) 

     when: 
      def results = monitoringService.getProjectMonitorings(params, proj.id) 

     then: 
      results.totalCount == 2 
      results.size() == 1 
    } 

    void "results can be offset"() { 
     given: 
      def params1 = new EcosListParams(new GrailsParameterMap ([offset: 0, max:1, sortColumn: 'id', order: 'asc'], null)) 
      def params2 = new EcosListParams(new GrailsParameterMap ([offset: 1, max:1, sortColumn: 'id', order: 'asc'], null)) 

     when: 
      def results1 = monitoringService.getProjectMonitorings(params1, proj.id) 
      def results2 = monitoringService.getProjectMonitorings(params2, proj.id) 

     then: 
      results1.size() > 0 
      results1.id != results2 
    } 

} 

を行う必要があります

Monitoring getMonitoring(Project p) { 
    HabitatObjectiveSuccess hos = HabitatObjectiveSuccess.list(max: 1).get(0); 

    return new Monitoring(visitDate: new Date(), notes: 'notes', created: new Date(), createdBy: getPerson(), 
      lastUpdated: new Date(), lastUpdatedBy: getPerson(), maintActivitiesOccurring: 2, 
      maintActivitiesOccurrText: 'maintActivitiesOccurrText', landownerObjectivesMet: 1, 
      landownerObjectivesMetText: 'landownerObjectivesMetText', speciesObjectivesMet: 1, 
      speciesObjectivesMetText: 'speciesObjectivesMetText', habitatObjectiveSuccess: hos, 
      habitatObjectiveSuccessText: 'habitatObjectiveSuccessText', project: p 
     ) 
    } 
+0

こんにちは、私はGrailsのバージョンが混乱することができるが、あなたがGrailsの2.5.5のためIntegrationSpecを延長するべきではないのですか? – loteq

関連する問題