1

私は、独自のドメイン クラスを持つ Grails プラグインに取り組んでいます。名前付きデータ ソースの使用を開始するまで、統合テストは正常に機能していました。ここで、テストを実行すると、テストで を呼び出すたびにフィクスチャ データがデータベースに複製されますfixtureLoader.load()

これが私のドメインオブジェクト、フィクスチャなどの例です:

Program.groovy:

package mydomain

class Program {
  String name
  String code

  static mapping = {
    datasource 'myData'
  }
  String toString() {
    "$name ($code)"
  }
}

programData.groovy:

import mydomain.*
fixture {
  currentProg1(Program, name:'Program Name', code:'44')

}

私のデータソースは次のように構成されています:

    test {
    dataSource_myData {
        dbCreate = "create-drop"
        url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
    }

そして私のテストは次のようなものです:

package mydomain

import grails.plugin.spock.IntegrationSpec

class ProgramSpec extends IntegrationSpec {
def fixtureLoader

def "test current program list"() {
    given:
        def loader = fixtureLoader.load("programData")
    when:
        List results = Program.list()
    then:
        assert results.size() == 1          
}

    def "test toString"() {
    given:
        def loader = fixtureLoader.load("programData")
    when:
        def testCase = loader.currentProg1
    then:
        assert testCase.toString() == "Program Name (44)"
} 
}

テストを実行すると、次のようになります。

Failure:  test current program list(com.sg.contract.guide.ProgramSpec)
Condition not satisfied:
results.size() == 1
|       |      |
|       2     false
[Program Name (44), Program Name (44)]

2 番目のテストをコメントアウトすると、正常に動作します。ただし、両方のテストを実行すると、フィクスチャ データが DB に 2 回挿入されます。

dataSource_myDataデータ ソースを変更して名前付きソースを削除し (に変更dataSource)、ドメイン クラスのマッピングからデータソース構成を削除しても機能します。

名前付きデータソースを使用すると、フィクスチャ データが 2 回挿入されるか、各テスト後にクリーンアップされない理由がわかりません。何か案は?

4

1 に答える 1

1

バグのようです。チケットを作成しました。投票してくださいhttp://jira.grails.org/browse/GPFIXTURES-28

于 2013-08-13T17:08:04.097 に答える