用于重定向和渲染的 Grails spock 单元测试
Grails spock unit test for redirect and render
我有以下功能需要进行单元测试。但我坚持如何准确地测试它。还有必要对这些功能进行单元测试吗?我正在使用 Grails 2.5.1 和 spock 0。7.Please 建议。
def allGeneralNotes() {
def ben = Beneficiary.findById(params.id)
if(!ben){
redirect(controller: 'dashboard',action: 'index')
}
def generalNotes = Note.findAllByBeneficiaryAndTypeAndIsDeleted(Beneficiary.findById(params.id), NoteType.GENERAL,false).sort { it.dateCreated }.reverse()
def userNames = noteService.getUserName(generalNotes);
render view: 'generalNotes', model: [id: params.id, generalNotes: generalNotes, userNames:userNames]
}
我不得不假设许多方面的名称,但希望以下内容能让您朝着正确的方向前进。
需要注意的一件事是,您在控制器方法中调用了 Beneficiary.findById(params.id)
两次,您可以将 ben
传递给 findAllByBeneficiaryAndTypeAndIsDeleted
.
您可能还需要将参数添加到以下模拟方法返回的新对象中。
@TestFor( BeneficiaryController )
@Mock( [ Beneficiary, Note ] )
class BeneficiaryControllerSpec extends Specification {
def noteService = Mock( NoteService )
void setup() {
controller.noteService = noteService
}
void "test allGeneralNotes no beneficiary" () {
when:
controller.allGeneralNotes()
then:
response.redirectedUrl == '/dashboard/index'
}
void "test allGeneralNotes beneficiary found" () {
given:
Beneficiary.metaClass.static.findById{ a -> new Beneficiary()}
Note.findAllByBeneficiaryAndTypeAndIsDeleted = { a, b -> [new Note(dateCreated: new Date()), new Note(dateCreated: new Date())]}
when:
controller.allGeneralNotes()
then:
1 * noteService.getUserName( _ ) >> 'whatever username is'
view == '/generalNotes'
}
}
我有以下功能需要进行单元测试。但我坚持如何准确地测试它。还有必要对这些功能进行单元测试吗?我正在使用 Grails 2.5.1 和 spock 0。7.Please 建议。
def allGeneralNotes() {
def ben = Beneficiary.findById(params.id)
if(!ben){
redirect(controller: 'dashboard',action: 'index')
}
def generalNotes = Note.findAllByBeneficiaryAndTypeAndIsDeleted(Beneficiary.findById(params.id), NoteType.GENERAL,false).sort { it.dateCreated }.reverse()
def userNames = noteService.getUserName(generalNotes);
render view: 'generalNotes', model: [id: params.id, generalNotes: generalNotes, userNames:userNames]
}
我不得不假设许多方面的名称,但希望以下内容能让您朝着正确的方向前进。
需要注意的一件事是,您在控制器方法中调用了 Beneficiary.findById(params.id)
两次,您可以将 ben
传递给 findAllByBeneficiaryAndTypeAndIsDeleted
.
您可能还需要将参数添加到以下模拟方法返回的新对象中。
@TestFor( BeneficiaryController )
@Mock( [ Beneficiary, Note ] )
class BeneficiaryControllerSpec extends Specification {
def noteService = Mock( NoteService )
void setup() {
controller.noteService = noteService
}
void "test allGeneralNotes no beneficiary" () {
when:
controller.allGeneralNotes()
then:
response.redirectedUrl == '/dashboard/index'
}
void "test allGeneralNotes beneficiary found" () {
given:
Beneficiary.metaClass.static.findById{ a -> new Beneficiary()}
Note.findAllByBeneficiaryAndTypeAndIsDeleted = { a, b -> [new Note(dateCreated: new Date()), new Note(dateCreated: new Date())]}
when:
controller.allGeneralNotes()
then:
1 * noteService.getUserName( _ ) >> 'whatever username is'
view == '/generalNotes'
}
}