2016-08-14 14 views
0

私はunit/integration/functional testingの初心者です。grailsプロジェクトの統合テストのSpock検証に関する問題

私は、起動されたアプリケーションとgrailsコンソールの両方で動作し、テストの実行中ではない私のドメインクラス用のカスタムバリデータを持っています。

2つのドメインクラスに対して2つの同様のバリデータがありますが、そのうちの1つは通過し、もう1つは受け入れません。

この検証の主な考え方は、ユーザーが2つの電子メールを持っている可能性があるということです。 1つはログイン用で、もう1つはプロフィールで表示するためのものです。ユーザーはプロファイルに表示される別のユーザーの電子メール(およびその反対)を選択できません。

(ユーザドメインクラスのメールに適用される)対応するテストに合格するいずれか

validator: {email, user -> 
    UserProfile userProfile = UserProfile.findByProfileEmail(email) 

    if (!userProfile) { 
     true 
    } else if (userProfile?.user == user) { 
     true 
    } else { 
     false 
    } 
} 

もう一つは同じであるが、ユーザは、(のUserProfileドメインクラスにprofileEmailに適用される)プロファイルメールをチェックします。

validator: {profileEmail, userProfile -> 
    User user = User.findByEmail(profileEmail) 

    if (!user) { 
     true 
    } else if (user?.userProfile == userProfile){ 
     true 
    } else { 
     false 
    } 
} 

試験からのサンプルコード:

def setup() { 
    userService.createUser(email: EMAIL, password: PASSWORD, firstName: FIRST_NAME) 
    springSecurityService.reauthenticate(EMAIL, PASSWORD) 
} 

void "Attempt to set non-unique profileEmail"() { 
    given: "Create additional user" 
    userService.createUser(email: EMAIL_ADDITIONAL, password: PASSWORD, firstName: FIRST_NAME) 

    when: "Set user's profile email the same as additional user's email" 
    userProfileService.updateUserProfile([profileEmail: EMAIL_ADDITIONAL]) 

    then: "Check that non-unique profileEmail was not saved" 
    User.findByEmail(EMAIL).userProfile.profileEmail != EMAIL_ADDITIONAL 
} 

どういうわけか私のカスタムバリデーターは、コンソールと実行中のアプリケーションで動作しますが、統合テストでは機能しません。

サービスやドメインクラスのコードサンプルが必要な場合がありますか? github repoへのリンクは役に立ちますか?

+0

あなたはそれらを読んでいるものを助けるために小さなものにあなたの質問を破る必要があります。 – kazanaki

+0

github repoはあなたがそれを公開しているなら確かに助けになるでしょう... – kazanaki

+0

@kazanaki、アドバイスありがとうございます。質問を調整しましたが、とにかく私は答えを発見しました。 –

答えて

0

問題は、モックされた従属ドメインオブジェクト間の不適切な対話によって引き起こされました。私の場合、UserProfileはUserに属していますが、UserProfileを変更してUserから取得すると、驚きを得ることになります(検証は機能しません)。

いくつかの情報はここに見出すことができる:Unit test grails with domain objects using GORM functions

関連する問題