4

現在の Backbone/CoffeeScript アプリケーションにいくつかのテストを統合しようとしています。

ウィンドウ オブジェクトに焼き付けたアプリケーション用のモジュールを作成しましたが、ウィンドウが定義されていないため、モカ テストの実行に失敗します。

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

モカのウィンドウを定義する方法についての指示はありますか?

jsdom を使用してそのようにウィンドウを作成しようとしましたが、それでも同じエラーがスローされました。前もって感謝します。

編集:

jsdom を使用するよりも、zombie.js を使用するほうが先に進みます。

zombie = require 'zombie'
browser = new zombie.Browser
browser.window.location = 'http://local.cart'

DOMWindow にアクセスし、変数をその値の 1 つに設定する方法を見つけようとしています。

browser.window が、Chrome コンソールで window にアクセスしたときに返されるオブジェクトと同じであれば理想的ですが、そうではありません。

探しているものにアクセスできます

zombie.visit 'http://local.cart', (err, browser) ->
  throw err if err
  browser.window.Cart

すべての仕様で使用できるグローバル変数にこれが返すものを設定する方法はありますか?

beforeEach を試したり、前のブロックをメソッドに設定したり、そのメソッドに変数を設定したりしても、欲しいものが得られないようです。

4

1 に答える 1

0

アプリのノード側 (モカ) で実際の DOM ウィンドウ オブジェクトを渡そうとするのではなく、間違いなくウィンドウをモックしたいと思うでしょう。

私が作成したこのパターンを試してみてください (私が読んだ 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'
于 2012-07-02T18:27:39.570 に答える