1

次のコードのコントローラーがあります。

def profile = Profile.findByProfileURL(params.profileURL)

次のようなユニットテスト:

@TestMixin(GrailsUnitTestMixin)
@TestFor(ProfileController)
@Mock([User])
class ProfileControllerTests {

    def void testIndex() {
        mockDomain(User, [[firstname: 'Niko',...]])

        controller.params.profileURL = 'niko-klansek'

        controller.index()

        ...
    }

}

テストを実行すると、コントローラーを参照して次の例外が発生します。

No signature of method: sportboard.core.profile.Profile.methodMissing() is applicable for argument types: () values: []

テストで設定した params 値 profileURL はコントローラから見えませんか? コントローラーが見えるようにパラメーターを設定するにはどうすればよいですか?

4

1 に答える 1

1

例外は不可解ですが、Profileドメイン クラスがモックされていないことを示しています。@Mock注釈に追加する必要があります。また、@TestMixinここでは省略できますmockDomain。テストで直接使用しないでください。このユーザー インスタンスを保存するだけです。全体として、次のようになります。

@TestFor(ProfileController)
@Mock([User, Profile])
class ProfileControllerTests {
    def void testIndex() {
        def user = new User(firstName: 'Niko').save()

        controller.params.profileURL = 'niko-klansek'
        ...
    }
}
于 2013-01-30T12:51:21.387 に答える