2017-01-27 14 views
13

tôi cần phải thử nghiệm một chức năng mà sẽ mở ra một tab mới trong trình duyệtLàm thế nào để giả lập đối tượng cửa sổ JavaScript bằng Jest?

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

Tôi muốn thử chức năng mở của cửa sổ để tôi có thể xác minh địa chỉ URL chính xác được chuyển vào chức năng mở.

Sử dụng Jest, tôi không biết cách chế nhạo cửa sổ. Tôi đã cố gắng để thiết lập window.open với một chức năng giả nhưng cách này không hoạt động. Dưới đây là các trường hợp thử nghiệm

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

nhưng nó mang lại cho tôi những lỗi

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

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

những gì tôi nên làm gì để các trường hợp thử nghiệm? bất cứ đề nghị hoặc gợi ý được đánh giá cao

Trả lời

7

Thay vì window sử dụng global

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

bạn cũng có thể thử

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

Cố gắng này nhưng không làm việc cho tôi. Trường hợp của tôi là lạ, chế giễu công trình tại địa phương nhưng không cho một hợp nhất PR trong Travis ... bất kỳ ý tưởng? –

+2

vẫn là lỗi tương tự. – danny

+0

@AlexJM bạn có gặp vấn đề tương tự không? tâm trí để chia sẻ làm thế nào để bạn giả lập các đối tượng cửa sổ? – danny

0

Bạn có thể thử này:

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(); 
}); 
Các vấn đề liên quan