Работает ли 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
}
}