我正在尝试将一些测试集成到我当前的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或将前一个块设置为方法并将变量设置为该方法。
答案 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'