Grails: интеграционное тестирование почтового плагина - PullRequest
3 голосов
/ 04 ноября 2010

Я пытаюсь провести интеграционный тест класса, который использует плагин почты. Когда я запускаю тест (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 ]

2 голосов
/ 18 ноября 2010

Посмотрев на собственные тесты автора плагина для почтового плагина на 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])
        }

И теперь это работает в интеграционных тестах и ​​нормальном выполнении программы.

0 голосов
/ 04 ноября 2010

Параметр body в методе sendMail(..) является картой с ключами view, model и plugin.Требуется значение plugin, которое указывает на некоторое другое, поддерживающее, например, плагин, имя «email-подтверждение» для этого соответствующего плагина.

Ваше сообщение об ошибке:брошенный в org.grails.mail.MailMessageBuilder.renderMailView(Object, Object, Object).Вы можете найти этот класс в папке вашего плагина проекта Grails .

К сожалению, я не нашел слишком много документации по плагину Mail.Таким образом, на данный момент я не могу легко рассказать о том, как использовать вышеупомянутые поддерживающие плагины.Однако, если вы не можете продвинуться вперед, я мог бы попытаться продолжить расследование.Спасибо

...