让Jasmine测试路由时遇到问题(iron:与路由器相关)

让Jasmine测试路由时遇到问题(iron:与路由器相关),jasmine,iron-router,meteor-velocity,Jasmine,Iron Router,Meteor Velocity,我刚刚开始尝试使用流星的速度测试。我在尝试测试我的路线时遇到了障碍。我不能用茉莉花或摩卡咖啡来做这个: (默认meteor应用程序中只添加了iron:router、velocity:html reporter、coffeescript和sanjo jasmine等软件包。) 在/tests/jasmine/client/integration/router-test.coffee中: describe "Route", -> describe "non-existing", -&g

我刚刚开始尝试使用流星的速度测试。我在尝试测试我的路线时遇到了障碍。我不能用茉莉花或摩卡咖啡来做这个:

(默认meteor应用程序中只添加了iron:router、velocity: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>
这意味着路由器确实找到了路由“bar”,但导航似乎不是以同样的方式运行的。更奇怪的是,当我导航到
http://localhost:64927/?jasmine=true
,我的浏览器跳转到
http://localhost:64927/bar
用一些神奇的方法

有什么想法吗


此外,我注意到,尽管JS控制台上存在未捕获的异常,但有时测试运行绿色。由于这些错误往往会中断测试函数的执行,并且不会因此处理断言,因此在测试框架中出现这种情况是非常危险的。你知道如何应对吗?

我猜你可能遇到了一个异步问题
Router.go
不是即时的,而且您在查看当前路由是否已切换后,检查得太快

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

我不能确切地告诉您要测试什么,但是您可以添加一个钩子来在
路由器.onAfterAction
中执行断言。不要忘记使用Jasmine的
done()
方法,因为您将要进行异步测试

至于在异常上运行绿色的测试,那将是一个bug!如果您可以创建一个可复制的回购协议,并在GitHub上发布框架问题的bug,这将有助于解决问题


希望有帮助

实际上,您必须添加一个助手,该助手在Velocity文档中的“将Velocity/Jasmine与iron router集成”中有描述:


事实证明,这确实是Router.go明显异步的一个问题。(它甚至没有回调,这使得修复它非常令人沮丧,因为唯一的出路是超时。)我准备为Velocity提交至少两个bug,因为其中一些东西似乎与Jasmine或Mocha无关:(从我看来,这是一个:),因为它将帮助解决这些bug!您还可以使用Meteor.setTimeout()进行创作,并在延迟后进行测试。我想你也应该游说Iron Router加入Router.go()功能的回调版本。我在meteor jasmine wiki上看到了一篇与此相关的帖子:
Expected 'http://localhost:64927/?jasmine=true' to equal '/bar'.