Работает ли findOrCreateBy с другими экземплярами домена?

Я пытаюсь использовать findOrCreateBy искать объект или создавать экземпляр, если я не могу найти тот, который соответствует, но он не работает, как я ожидал.

Вот что у меня есть:

String myBaz = "some unique string"
FooType myFooType = FooType.findByName("Large")

// The Foo table is empty, so this should give me a new Foo
Foo myFoo = Foo.findOrCreateByBazAndFooType(myBaz, myFooType)

assert myFoo.baz == myBaz 
assert myFoo.fooType == myFooType // Fails because myFoo.fooType is null, 
// but should be set to myFooType

Что я делаю неправильно? Почему fooType не правильно настроен? Это ожидаемое поведение или это ошибка в Grails?

1 ответ

Я не уверен, но похоже, что вы пытаетесь сделать это в качестве теста. (основываясь на вашем утверждении)

Динамические методы, добавленные фреймворком Grails, не доступны в модульных тестах, если вы не издеваетесь над классом домена. Теперь это старый код Grails, взятый с другого сайта Вопроса, но это может помочь

import grails.test.GrailsUnitTestCase   

class MessageControllerTests extends GrailsUnitTestCase {   

    def savedMessages   

    void setUp() {   
        super.setUp()   
        savedMessages = []   
        mockDomain(Message, savedMessages) //mocking the domain class   
        mockController(MessageController) //mocking the controller   
    }   

    void testMessageCanBeCreated() {   
        def messageController = new MessageController()   
        messageController.params.title = 'detail'  
        messageController.params.detail = 'some detail'  

        messageController.save() // executing the save action on the MessageController   

        assertEquals('list', messageController.redirectArgs.action)   
        assertEquals(1, savedMessages.size()) //assert the message has been saved   
    }   
}  
Другие вопросы по тегам