使用Spock和Grails在全局存根类中注入存根协作者

亚历克斯·比兹利(Alex Beardsley)

我正在使用Grails 2.4.4在Spock单元测试中渲染GSP。GSP有许多自定义标记库,其中许多称为外部服务。问题是我无法将存根的服务注入这些taglib中,而当我调用该服务时,它始终为null。这是我试图获得最简单的案例的方法:

@TestMixin(GroovyPageUnitTestMixin)
@Mock(FooTagLib)
class MyGspSpec extends Specification {
    def setup() {
        def barStub = Stub(BarService)
        def tagLibStub = GroovyStub(FooTagLib, global:true) {

        }
        tagLibStub.barService = barStub
    }
    def 'test method'() {
        when: String result = render('myView', model:[:])
        then: assert result != null
    }
}

标签库:

class FooTagLib {
    static String namespace = "baz"
    BarService barService
    Closure<StreamCharBuffer> foo = { GroovyPageAttibutess attrs ->
        out << barService.something()
    }
}

_foo.gsp的内容:

<baz:foo/>

我也尝试过这个:

FooTagLib.metaClass.barService = Stub(BarService) //also tried GroovyStub

我什至尝试将吸气剂放在taglib上并存根,但它也不起作用:

在设置中:

def barService = Stub(BarService)
GroovyStub(FooTagLib, global:true) {
    getBarService() >> barService
}

在taglib中:

BarService barService
BarService getBarService() { return barService }
//....
out << getBarService().something()

最后,唯一有效的方法(与吸气剂一起使用)是:

FooTagLib.metaClass.getBarService = { -> return Stub(BarService) }

但这似乎是一个非常糟糕的hack。

我不确定如何将其存根版本注入taglib。在我看来,至少其中一种应该有效,但是显然我在做错事。

dmahapatro

这就是我通过tagLib的单位规格的方式:

@TestFor(FooTagLib)
class FooTagLibSpec extends Specification {

    def setup() {
        // tagLib is available by default of above annotation is used
        tagLib.barService = Mock(BarService) {
            // Mock the service and stub the response
            1 * serviceMethod() >> { "Hello World Returns" }
        }
    }

    void "test something"() {
        expect: 'applying template would result in mocked response'
        applyTemplate('<baz:foo/>') == "Hello World Returns"
    }

    void "test taglib method call"() {
        expect:
        tagLib.foo() == "Hello World Returns"
    }
}

class FooTagLib {
    static defaultEncodeAs = [taglib:'html']
    static String namespace = "baz"    
    BarService barService

    Closure<StreamCharBuffer> foo = { attrs ->
        out << barService.serviceMethod()
    }
}

class BarService {
    def serviceMethod() { "Hello World" }
}

我希望我能够满足您在测试中寻找的检查点。您还可以看到spec能够BarService无问题地进行模拟如果需要信息,请大喊大叫。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CRC(类责任协作者)和UML

来自分类Dev

CRC(类责任协作者)和UML

来自分类Dev

如果我使用多个远程存储库(Github 和 BitBucket),其他协作者会知道吗?

来自分类Dev

使用Spock的存根动态查找器

来自分类Dev

如何在具有多个协作者的环境中使用本地化的PostBuildEvent?

来自分类Dev

使用github cli将外部协作者添加到组织存储库

来自分类Dev

如何在GitHub上使用SSH密钥作为协作者提交?

来自分类Dev

OpenShift应用程序-使用Rhc作为管理员协作者无法查看日志

来自分类Dev

Grails Spock Mock在单元测试中注入了服务

来自分类Dev

限制协作者仅推送到特定分支

来自分类Dev

通过api确定协作者的权限(对组织存储库)?

来自分类Dev

协作者电子邮件邀请的安全性

来自分类Dev

授予协作者运行流星部署的权限

来自分类Dev

协作者电子邮件邀请的安全性

来自分类Dev

每个协作者的文字颜色不同

来自分类Dev

限制协作者仅推送到特定分支

来自分类Dev

我应该如何在全局使用RSpec存根方法?

来自分类Dev

我应该如何在全局使用RSpec存根方法?

来自分类Dev

在NodeJS中使用Mocha和Sinon存根ES6类方法

来自分类Dev

在NodeJS中使用Mocha和Sinon存根ES6类方法

来自分类Dev

RMI存根和超载

来自分类Dev

存根和模拟Minitest

来自分类Dev

Spock存根未返回期望值

来自分类Dev

使用Mypy本地存根

来自分类Dev

使用RSpec进行存根

来自分类Dev

如何使用rspec / rspec-mocks存根类方法

来自分类Dev

无法使用Sinon在类中对箭头函数进行存根

来自分类Dev

您如何使用SinonJS模拟/存根类实例化?

来自分类Dev

如何使用 sinon 在被测函数中存根类方法?

Related 相关文章

热门标签

归档