4

我正在尝试将一些测试集成到我当前的 Backbone/CoffeeScript 应用程序中。

我已经为我的应用程序创建了一个模块,烘焙到 window 对象中,但是运行任何 mocha 测试都会失败,因为 window 是未定义的。

 module = (name) ->
   window[name] = window[name] or {}
 module 'Cart'

关于如何为摩卡定义窗口的任何方向?

我确实尝试过使用 jsdom 并以这种方式创建一个窗口,但它仍然抛出了同样的错误。提前致谢。

编辑:

使用zombie.js 让我比使用jsdom 更进一步。

zombie = require 'zombie'
browser = new zombie.Browser
browser.window.location = 'http://local.cart'

我试图找出一种访问 DOMWindow 并将变量设置为其值之一的方法。

如果 browser.window 与在 Chrome 控制台中访问窗口返回的对象相同,那将是理想的,但事实并非如此。

我可以访问我正在寻找的东西

zombie.visit 'http://local.cart', (err, browser) ->
  throw err if err
  browser.window.Cart

有没有办法让我将返回的内容设置为我可以在所有规范中使用的全局变量?

似乎无法得到我想要的尝试 beforeEach 或将前一个块设置为方法并将变量设置为该方法。

4

1 回答 1

0

我认为您肯定会想要模拟窗口,而不是尝试在应用程序的节点端传递一个真实的 DOM 窗口对象(mocha)。

试试我刚刚创建的这个模式(有点符合我读过的 mocha 教程,并使用this在浏览器(窗口)与在节点上运行(导出)时发生变化的上下文:

/**
 * My namespace is 'AV'
 */
(function(root) {
    /**
     * @namespace root namespace object
     */
    root['AV'] = root['AV'] || {};
    var AV = root['AV'];

    AV.CoolThing = {
        //...
    };

    // this will give you
    // your "window" object
    // which is actually
    // module.exports
    return root;

})(this);

然后,测试可能看起来像这样(我的也在 coffeescript 中):

chai = require 'chai'
chai.should()

# exports / "window"
{ AV } = require '../src/AV.js'

describe 'Sample test with namespace', ->
    it 'should be an object', ->
        AV.should.be.an 'object'
于 2012-07-02T18:27:39.570 回答