在Mocha中定义测试窗口

时间:2012-04-10 14:50:53

标签: coffeescript mocha zombie.js

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

我已经为我的应用程序创建了一个模块,但是运行任何mocha测试都会失败,因为窗口是未定义的。

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

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

我确实尝试过使用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.Cart800

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

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

1 个答案:

答案 0 :(得分: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'