【问题标题】:Integration testing using spock使用 spock 进行集成测试
【发布时间】:2013-10-02 09:44:14
【问题描述】:

在我的应用程序中有AddressBookController,它有一个editContact 操作,如下所示:

def editContact(){
    AddressBook addressBook=AddressBook.findById(params.addressBookId)
    render view: 'addContact', model: [addressBook:addressBook]
}

现在我正在尝试测试视图和模型:

class AddressBookControllerSpec extends IntegrationSpec{

AddressBookController addressBookController = new AddressBookController()

void setup() {

}

def "editContact action renders view with addressBook details"() {
    when:
    addressBookController.editContact()
    then:
    addressBookController.modelAndView.model.addressBook
}

void cleaup() {
    // Tear down logic here
 }
}

但我的测试用例失败,堆栈跟踪如下:

运行 2 个 spock 测试... 1 of 2

| Failure:  editContact action renders view with addressBook details(cvsurgeon.AddressBookControllerSpec)
|  java.lang.NullPointerException: Cannot get property 'model' on null object
    at cvsurgeon.AddressBookControllerSpec.setup(AddressBookControllerSpec.groovy:15)
| Completed 2 spock tests, 1 failed in 660ms
| Tests FAILED  - view reports in ....

可能是什么问题。

【问题讨论】:

  • run-app 之后点击浏览器中的操作时,您是否能够使用模型数据渲染视图?
  • 是的,我的编辑视图正在正确地使用模型渲染。
  • 我正在使用 grails 2.2.0,我已经测试了新应用程序仍然给出了相同的结果。我认为 modelAndView 没有被框架实例化。

标签: grails integration-testing spock


【解决方案1】:

试试这个..,.

AddressBookController controller = new AddressBookController()

def "editContact action renders view with addressBook details"() {
  when:
    controller.params.addressBookId = 1   //valid id 
    controller.editContact()
  then:
    assert controller.modelAndView.model.addressBook
    assert controller.modelAndView.modelMap.addressBook
    assert controller.modelAndView.viewName == "/addressBook/addContact"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 2019-01-22
    • 2023-03-11
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    相关资源
    最近更新 更多