2016-05-18 10 views
1

私はフロントエンドのreact/reduxアプリケーション用のテストを書こうとしています。ここでmocha、sinon、windowオブジェクトをスタブする

は私のテストで私をトリップされたモジュールの一部である:ここで

import 'aws-sdk/dist/aws-sdk'; 
import Bluebird from 'bluebird'; 

const AWS = window.AWS; 

は私のテストの始まりです:

import chai from 'chai'; 
import { expect } from 'chai'; 
import chaiAsPromised from 'chai-as-promised'; 
import sinon from 'sinon'; 

chai.use(chaiAsPromised); 

describe("S3Gateway",() => { 
    let awsStub; 
    let sandbox; 
    let writeObject; 

    beforeEach(() => { 
    sandbox = sinon.sandbox.create(); 
    writeObject = require('../../../app/lib/aws/s3gateway').writeObject; 

    awsStub = sinon.stub().returns({ 
     S3: sinon.stub().returns({ 
     putObject: sinon.spy() 
     }) 
    }); 
    sandbox.stub(window, 'AWS', awsStub); 
    }); 

私は標準出力に得続けるエラー私のターミナルウィンドウでmochaを実行してから:

$ mocha test/lib/aws/s3gateway.js --compilers js:babel-core/register 


    S3Gateway 
    1) "before each" hook for "should attempt to write json object to s3" 


    0 passing (483ms) 
    1 failing 

    1) S3Gateway "before each" hook for "should attempt to write json object to s3": 
    ReferenceError: window is not defined 

AWSwindowオブジェクトからは、webpackがフロントエンドアプリケーション用にaws-sdkをバンドルする方法が原因です。他の人がこの問題にぶつかり、修正しますか?

答えて

2

mochaテストはnode.jsで実行され、node.jsにはグローバルウィンドウ変数がありません。あなたも、あなたのテストを持っているしたいと、すぐにそれを埋めることができ

global.window = {}; 

を:しかし、あなたは簡単にあなたのテストで1を作成することができます

global.window = {AWS: /* insert your test data here*/ } 

、それは行う必要があります。

もっと現実的なウィンドウが必要な場合は、jsdomを使用する必要があります。

+0

ああ、「global.window」は私が紛失しているものです。私はそれを試してみましょう!ありがとう!! – dennismonsewicz

関連する問題