gpt4 book ai didi

backbone.js - 使用 Jasmine 单独测试 Marionette 模块

转载 作者:行者123 更新时间:2023-12-04 20:12:20 30 4
gpt4 key购买 nike

我有一个 Marionette 项目,类似于 http://www.backbonerails.com/ 中描述的设置
我正在使用 Rails、Coffeescript 和 Jasmine/Sinon 作为规范。

我在单独测试模块时遇到问题。一个例子是路由器:

@MyApp.module "DashboardApp", (DashboardApp, App, Backbone, Marionette, $, _) ->

class DashboardApp.Router extends Marionette.AppRouter
appRoutes:
"dashboard" : "showDashboard"

API =
showDashboard: ->
DashboardApp.Show.Controller.showDashboard()

App.addInitializer ->
new DashboardApp.Router
controller: API

我不确定如何独立于应用程序(window.MyApp)进行测试。我想基本上触发“#dashboard”路由并断言 showDashboard 被调用,而不必让整个应用程序参与其中。我们使用的是 Rails Assets 管道(所以没有 RequireJS),所以所有的 JS 文件都是在启动时加载的。我认为可以以某种方式模拟此模块中使用的 App 对象,但我对任何解决方案都持开放态度。

我同样遇到的另一个问题是测试 Marionette 命令和要求,例如在我拥有的 View 中
App.execute("navigate:root")

问题再次是我不想让真正的应用程序参与规范,我想例如为规范制作一个新的 Marionette.Application。该 View 位于一个模块中,该模块的定义方式与我在第一个代码示例中显示的方式相同。

基本上我想避免在规范中使用真正的应用程序,并使用模拟或(可能更好/更容易)只是一个新的 Marionette.Application。所以这对我来说在所有事情通过应用程序对象的情况下都是有用的,例如 Wreqr 的东西,路由器的初始化程序等。

最佳答案

您应该使用 sinonJs stub 。

第一个测试应该实例化路由器,然后 stub Controller 的 showDashboard 方法。

@router = new App.DashboardApp.Router
@showDashboardStub = sinon.stub @router.controller, 'showDashboard'
@router.navigate "dashboard", {trigger: true}

以及它被称为的测试
expect(@showDashboardStub).toHaveBeenCalled()

第二个测试取决于您是要测试被调用执行的命令还是正在处理的命令。第一种情况是实例化执行器和 stub App.execute,第二种情况是实例化处理命令的类并调用 App.execute。

关于backbone.js - 使用 Jasmine 单独测试 Marionette 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15789988/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com