我正在尝试使用Grails Controller 中的单元测试来测试是否在 Controller 的方法中设置了 session 变量,但是它抱怨设置了只读属性:
Cannot set readonly property: session for class: MyController
我有这样的事情:
class MyController {
def settingSession = {
session.var1 = "hello world!"
}
}
这将是我的测试:
class MyControllerUnitTest extends ControllerSpec {
def "My test with sessions"() {
when:
controller.settingSession()
then:
controller.session.var1 == "hello world!"
}
}
我希望我应该编写一个集成测试,但我想知道是否有可能在单元测试中进行此测试。
最佳答案
以下测试将在Grails 2.1.0中通过
Controller :
// grails-app/controllers/demo/MyController.groovy
package demo
class MyController {
def settingSession() {
session.band = 'King Crimson'
}
}
单元测试:
// test/unit/demo/MyControllerTests.groovy
package demo
import grails.test.mixin.*
import org.junit.*
@TestFor(MyController)
class MyControllerTests {
void testSettingSession() {
controller.settingSession()
assert session.band == 'King Crimson'
}
}
如果您使用的是Spock:
// test/unit/demo/MyControllerSpec.groovy
package demo
import grails.test.mixin.*
import spock.lang.Specification
@TestFor(MyController)
class MyControllerSpec extends Specification {
void 'test session'() {
when:
controller.settingSession()
then:
session.band == 'King Crimson'
}
}