【发布时间】:2014-01-09 20:36:48
【问题描述】:
更新:我发现了问题。我需要按如下方式保存“train”域。
train.save(flush: true)
我也需要提供冲洗。
我进行了编辑以包含请求的信息。谢谢。
我有两个领域类如下。
class Train {
String name
static hasMany = [passengers: Person]
. . .
}
class Person {
String firstName
String lastName
. . .
}
我正在尝试使用 where 查询来查找具有给定名字的乘客。这是完整的集成测试代码。第一个查询,寻找乘客,不起作用。第二个,按名称查找火车,有效。
我正在使用 Grails 2.2.1 并在我的 IDE Groovy/Grails Tool Suite 3.2 中运行测试。我不是在引导数据,而是在测试中添加数据。请参阅下面的 testSomething 代码。
这是测试代码。
import grails.converters.*
import static org.junit.Assert.*
import org.junit.*
class TrainIntegrationTests {
@Before
void setUp() {
// Setup logic here
}
@After
void tearDown() {
// Tear down logic here
}
@Test
void testSomething() {
def person1 = new Person()
person1.firstName = "George"
person1.lastName = "Romero"
person1.save();
println "person1.id: " + person1.id
def person2 = new Person()
person2.firstName = "Jane"
person2.lastName = "Smith"
person2.save();
def train = new Train()
train.name = "This Train"
train.addToPassengers(person1)
train.addToPassengers(person2)
train.save()
// This prints out 2.
println "passengers size" + train.passengers.size()
// This does not work. No results are returned.
def query = Train.where {
passengers {
firstName == 'George'
}
}
def qResults = query.list()
// No results
println "qResults: " + qResults
// This does work. Results returned.
def query1 = Train.where {
name == 'This Train'
}
def qResults1 = query1.list()
// Returns results.
println "qResults1: " + qResults1
// Don't really care about assert results yet.
// Just looking at the print outs and seeing how this all works.
assert true
}
}
我在乘客查询中遗漏了什么?
【问题讨论】:
-
您是否正在为您的测试引导测试数据?你确定数据在那里吗?
-
你使用的是什么版本的grails?
-
也将集成测试添加到问题中。
-
请添加集成测试或说明您在哪里添加一些记录以进行测试。使用您的代码,我们永远不会看到“George”何时/如何被保存。
-
我已经编辑了我的原始帖子以包含完整的集成测试代码和 Grails 版本信息。感谢您的回复。