2017-01-27 10 views
13

私は正しいURLがオープン関数に渡さされていることを確認することができますので、ウィンドウのオープン関数をモックしたいブラウザJestを使ってJavaScriptウィンドウオブジェクトをモックする方法は?

openStatementsReport(contactIds) { 
    window.open(`a_url_${contactIds}`); 
    } 

で新しいタブを開く機能をテストする必要があります。

Jestを使って、私はウィンドウを模擬する方法を知らない。私はモック関数でwindow.openを設定しようとしましたが、この方法では動作しません。以下は、テストケースは

it('correct url is called',() => { 
    window.open = jest.fn(); 
    statementService.openStatementsReport(111); 
    expect(window.open).toBeCalled(); 
}); 

ですが、それは私がテストケースに何をすべき

expect(jest.fn())[.not].toBeCalled() 

    jest.fn() value must be a mock function or spy. 
    Received: 
     function: [Function anonymous] 

私にエラーを与えて?任意の提案やヒントがglobal

it('correct url is called',() => { 
    global.open = jest.fn(); 
    statementService.openStatementsReport(111); 
    expect(global.open).toBeCalled(); 
}); 

代わりwindow使用の

答えて

7

を高く評価しているあなたも

const open = jest.fn() 
Object.defineProperty(window, 'open', open); 
+1

はこれを試みたがために働いていません私。私のケースは変だけど、トラッキングではPRマージのためにではなく、ローカルで作品を嘲笑している。 –

+2

はまだ同じエラーです。 – danny

+0

@AlexJMあなたは同じ問題がありますか?どのようにウィンドウオブジェクトをモックするのですか? – danny

0

を試みることができるあなたはこれを試すことができます。

import * as _Window from "jsdom/lib/jsdom/browser/Window"; 

window.open = jest.fn().mockImplementationOnce(() => { 
    return new _Window({ parsingMode: "html" }); 
}); 

it("correct url is called",() => { 
    statementService.openStatementsReport(111); 
    expect(window.open).toHaveBeenCalled(); 
}); 
関連する問題