无法让Jasmine测试路由(铁:路由器相关)

时间:2015-01-23 10:58:40

标签: jasmine iron-router meteor-velocity

我刚开始尝试为Meteor使用速度测试。我试图对我的路线进行测试,遇到了障碍。我无法使用Jasmine或Mocha:

(只有包铁:路由器,速度:html-reporter,coffeescript和sanjo-jasmine添加到默认的流星应用程序。) 在/tests/jasmine/client/integration/router-test.coffee中:

describe "Route", ->
    describe "non-existing", ->
        it "should not run green", ->
            Router.go "foo"
            expect(Router.current().url).toEqual("/foo")
    describe "existing", ->
        it "should run green", ->
            Router.go "bar"
            expect(Router.current().url).toEqual("/bar")

在/client/router.coffee中:

Router.route "bar"

在默认的html文件中:

<template name="bar">
    <p>Yeah.</p>
</template>

如果我在JS控制台中运行Router.go("bar"),它可以正常工作:Router.current().url输出/bar。但是,在记者中我得到以下错误:

Expected 'http://localhost:64927/?jasmine=true' to equal '/bar'.

这意味着路由器确实找到了路由&#34; bar&#34;,但导航似乎没有以相同的方式运行。更奇怪的是,当我导航到http://localhost:64927/?jasmine=true时,我的浏览器通过一些神奇的方式跳转到http://localhost:64927/bar

有什么想法吗?

另外,我注意到有时候测试会运行绿色,尽管JS控制台上有一个未被捕获的异常。由于这些错误往往会破坏测试函数的执行并且没有处理断言,因此在测试框架中这是一个非常危险的事情。知道如何应对这个吗?

2 个答案:

答案 0 :(得分:1)

实际上你必须添加一个助手,并在Velocity docs中将Velocity / Jasmine与铁路由器集成进行描述:

https://velocity.readme.io/docs/jasmine-integration-tests-with-iron-router

答案 1 :(得分:0)

我的猜测是你可能会遇到异步问题。 Router.go不是即时的,您在检查当前路线是否已切换后立即过快检查。

此外,jasmine=true是启动镜像测试时被点击的镜像的URL,因此当您获得当前路径(太快)时,它可能会被返回。当您手动转到镜像时,看起来测试再次运行(因为您有jasmine=true),而后者又在运行Router.go

我无法确切地说出您要测试的内容,但您可以在Router.onAfterAction中添加一个钩子来执行您的断言。不要忘记使用Jasmine的done()方法,因为您要进行异步测试。

对于在异常上运行绿色的测试,这将是一个错误!如果你可以创建一个可重现的repo并在GitHub上发布框架问题的bug,它将有助于解决这个问题。

希望有所帮助!