2012-04-10 33 views
4

我试图将一些测试集成到我当前的Backbone/CoffeeScript应用程序中。定义用于摩卡测试的窗口

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

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

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

我尝试过使用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或将前一个块设置为方法并将该变量设置为该方法。

回答

0

我想你一定要模拟窗口,而不是试图在应用程序的节点端(mocha)传递真正的DOM窗口对象。

尝试这种模式我刚刮起了(有点符合摩卡教程我已经阅读并使用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); 

然后,测试可能看起来像这样(我也在咖啡脚本):

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'