Grails:集成测试Mail插件

时间:2010-11-04 16:52:24

标签: email grails grails-plugin

我正在尝试集成测试使用Mail Plugin的类。当我运行我的测试(grails test-app -integration EmailerIntegration)时,我收到错误:

无法找到邮件正文布局/ _email。它是插件吗?如果是这样,您必须在[plugin]变量中传递插件名称

我的测试用例的setUp方法中是否缺少一些初始化代码?

以下是测试用例的代码:

package company

import grails.test.*

class EmailerIntegrationTests extends GrailsUnitTestCase {
    protected void setUp() {
        super.setUp()
    }

    protected void tearDown() {
        super.tearDown()
    }

    void testSomething() {
        User owner = new User()
        owner.displayName = "Bob"
        owner.email = "bob@yahoo.com"

        Emailer emailer = new Emailer()
        emailer.sendReadyEmail(owner)
    }
}

以下是正在测试的类的代码:

package company

import org.apache.log4j.Logger;
import org.codehaus.groovy.grails.commons.ApplicationHolder;
import org.springframework.context.ApplicationContext;

class Emailer {
    private Logger log = Logger.getLogger(this.getClass());
    ApplicationContext ctx = (ApplicationContext)ApplicationHolder.getApplication().getMainContext();
    def mailService = ctx.getBean("mailService");

    def sendReadyEmail = { owner ->
            mailService.sendMail {
                    to owner.email
                    subject "Ready to go"
                    body( view:"layouts/_email", model:[ownerInstance:owner])
            }
    }
}

谢谢,

埃弗雷特

2 个答案:

答案 0 :(得分:2)

https://github.com/gpc/grails-mail/blob/master/test/integration/org/grails/mail/MailServiceTests.groovy查看插件作者自己对邮件插件的测试之后,我意识到view参数值的路径都以'/'开头。我将方法改为

def sendReadyEmail = { owner ->
        mailService.sendMail {
                to owner.email
                subject "Ready to go"
                body( view:"/layouts/_email", model:[ownerInstance:owner])
        }

现在它适用于集成测试和正常的程序执行。

答案 1 :(得分:0)

body方法中的sendMail(..)参数是包含viewmodelplugin键的地图。需要plugin的值,并指向某些其他支持插件,例如,相应插件的名称“email-confirmation”。

org.grails.mail.MailMessageBuilder.renderMailView(Object, Object, Object)中会抛出您的错误消息。您可以在Grails项目的插件文件夹中找到此类。

不幸的是,我没有在Mail插件上找到太多文档。因此,目前,我不能轻易讲述如何使用上述支持插件。但是,如果你无法取得进展,我可能会尝试进一步调查。感谢