2012-04-10 3 views
4

Я пытаюсь интегрировать некоторые тесты в мое текущее приложение Backbone/CoffeeScript.Определение окна для тестирования в Mocha

Я создал модуль для моего приложения, запеченный в объекте window, но выполнение каких-либо мокко-тестов не выполняется, потому что окно не определено.

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

Любое направление относительно того, как я могу определить окно для мокко?

Я попытался использовать jsdom и создать окно таким образом, но он по-прежнему бросает ту же ошибку. Заранее спасибо.

EDIT:

Использование 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 

Есть ли способ для меня, чтобы установить, что это возвращается к глобальной переменной можно использовать на протяжении всех моих спецификаций?

Может показаться, что я не пытаюсь выполнить попытку перед первым или установить предыдущий блок методу и установить переменную для этого метода.

ответ

0

Я думаю, вы определенно захотите обмануть окно, а не пытаться передать реальный объект окна 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'