coffeescript - 在 Mocha 中定义测试窗口

标签 coffeescript mocha.js zombie.js

我正在尝试将一些测试集成到我当前的 Backbone/CoffeeScript 应用程序中。
我已经为我的应用程序创建了一个模块,烘焙到 window 对象中,但是运行任何 mocha 测试都会失败,因为 window 是未定义的。

 module = (name) ->
   window[name] = window[name] or {}
 module 'Cart'
关于如何为 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.Cart
有没有办法让我将返回的内容设置为我可以在所有规范中使用的全局变量?
似乎无法得到我想要的尝试 beforeEach 或将前一个 block 设置为方法并将变量设置为该方法。

最佳答案

我认为你肯定想要模拟窗口,而不是试图在你的应用程序的节点端传递一个真实的 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'

关于coffeescript - 在 Mocha 中定义测试窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10091025/

相关文章:

javascript - Node.js:如何为 prod 和 staging 设置不同的变量

android - 无法在 Android Chrome 中下载客户端生成的文件

javascript - 等待 mocha runner 事件的异步函数

javascript - Chai 检查某物的存在

Node.js 类型错误 : connect ECONNREFUSED 127. 0.0.1:3000

javascript - Zombie.js 不执行同步 ajax 请求

coffeescript - 编译到 `.js` 保持相同的文件夹结构

javascript - Mocha 模拟导入变量

node.js - 如何使用 zombie.js 登录 Wordpress 管理员?

node.js - NodeJS + CoffeeScript,根据要求渲染 CoffeeScript 编译的 js