我有一个 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 资产管道(所以没有 RequireJS),所以所有的 JS 文件都是在启动时加载的。我认为可以以某种方式模拟此模块中使用的 App 对象,但我对任何解决方案都持开放态度。
我同样遇到的另一个问题是测试 Marionette 命令和要求,例如在我拥有的视图中
App.execute("navigate:root")
问题再次是我不想让真正的应用程序参与规范,我想例如为规范制作一个新的 Marionette.Application。该视图位于一个模块中,该模块的定义方式与我在第一个代码示例中显示的方式相同。
基本上我想避免在规范中使用真正的应用程序,并使用模拟或(可能更好/更容易)只是一个新的 Marionette.Application。所以这对我来说在所有事情通过应用程序对象的情况下都是有用的,例如 Wreqr 的东西,路由器的初始化程序等。