ログイングループとそのステータスの一括更新を行うためのフォームがあるとします。使用されるロジックは、可能なすべてのIDとグループのトラックを保持する隠しフィールドを持つことに関するものです。ラジオbtns。それ以降のサービス、私たちのリスト内のIDを確認どんな活性化し、残りを非アクティブスルー:grails:コード対統合テストのlist.containsの振る舞い
def testUpdateLoginStatus() {
def id1 = createLogin().id
def id2 = createLogin().id
String[] allLoginIds = [id1 as String, id2 as String]
List<Long> enabledLoginIds = [id1]
loginService.updateLoginStatus(allLoginIds, enabledLoginIds)
def login1 = Login.get(id1)
def login2 = Login.get(id2)
assertTrue login1.enabled
assertFalse login2.enabled
}
Login createLogin() {
def now = System.currentTimeMillis()
def email = "int-test-" + now + "@somewhere.com"
def password = "Pwd" + now + "pwD"
def login = new Login(username: email, password: password, firstName: "Integration", lastName: "Test")
login.save(flush: true)
assertNotNull login.id
return login
}
:
def enabledLogins = toList(params.enabledLogins)
def allLoginIds = params.allLoginIds.toString().split(',')
loginService.updateLoginStatus(allLoginIds,enabledLogins)
ここにサービス
def updateLoginStatus(String[] allLoginIds, List<Long> enabledLoginIds) {
for (item in allLoginIds) {
def login = Login.get(item.toLong())
if (login) {
login.enabled = enabledLoginIds.contains(item.toLong()) ? true : false
login.save()
if (login.hasErrors()) {
login.errors.each { log.error(it) }
}
}
}
}
そして、ここでの定義は、統合テストです
ここに問題があります:
上記のコードは統合テストに合格しましたが、実際にorkingは私が間違っている、どこかに何とかので、その場合は統合テストに失敗した
enabledLoginIds.contains(item.toLong())... タイプのうち、 toLongを取る場合を除き...しかし、私は
感謝
Psのそれを見ることができない:1.3 Grailsの0.7
スタックトレース出力はありますか、それとも静かに失敗しますか? – gotomanners
は黙って失敗します – Sepi
'def login = Login.get(item.toLong())'で動作するのは奇妙です。 これはこのサンプルユースケースでは些細かもしれませんが、toLong()を呼び出す前に 'isLong()'でチェックするのがベストプラクティス – gotomanners