Régóta küzdök ezzel, és úgy tűnik, ez egy gyakori probléma, és nincs számomra megfelelő megoldás.
Amit próbálok tenni, az az, hogy tesztelem a save()-t meghívó vezérlőt, és a save()-on belül a metódus meghív egy szolgáltatást, amely a megadott parancsobjektumokkal menti az alkalmazottat.
Így néz ki a kód:
def save(EmployeeInputCommand employeeCommand, AddressCommand addressCommand) {
if (addressCommand.address.validate()) {
println "Validated address input"
employeeManagerService.save(employeeCommand, addressCommand)
println "Employee should be saved"
println "------------------------->"
println "${employeeGetterService.each {errors}}"
flash.message = "Employee has been successfully created!"
redirect(action: "index")
} else {
println "Addrescommand didnt validate: ${addressCommand.errors}"
flash.message = "Please input valid data!!!"
redirect(action: "create", model: [employee: employeeCommand, address: addressCommand])
}
}
A szolgáltatás ezt tartalmazza:
def save(EmployeeInputCommand employeeCommand, AddressCommand addressCommand) {
def employee = new Employee(employeeCommand.properties)
employee.address = addressCommand.address
for (id in employeeCommand.s) {
employee.addToSkills(Skill.get(id))
}
if (employee.validate()) {
employee.address.save()
employee.save()
}
else {
return false
}
}
Tudom, hogy ez működik, amikor megpróbálom ténylegesen menteni az alkalmazottat az alkalmazásomba, de az egységteszt során semmi sem történik.
Tesztem:
def "Create an Employee with good params"() {
given: "A valid employee command object"
def employeeCommand = new EmployeeInputCommand(
name: "John",
surname: "Smith",
birthdate: Date.parse("yyyy-MM-dd", "1992-06-08"),
salary: 21000,
s: [1, 3, 5]
)
and: "Also a valid address command object"
def addressCommand = new AddressCommand(
street: "Green Alley",
houseid: "42",
city: "Odense",
county: "Fyn",
postCode: "5000 C"
)
expect:
addressCommand.validate()
!Employee.findByNameAndSurname("John", "Smith")
when: "Saving employee"
request.method = "POST"
controller.save(employeeCommand, addressCommand)
Employee employee = Employee.findByNameAndSurname("John", "Smith")
println Employee.list()
then: "The employee is created, and browser redirected"
Employee.count == 4
employee
employee.skills.size() == 3
employee.address.postCode == "5000 C"
}
A kontroller.save() meghívásakor a teszt null hibával sikertelen. Túl sok időt töltöttem azzal, hogy ezt megoldjam, ami hiábavaló volt
Ez a kimeneti képernyőkép