2016-11-23 22 views
11

Tôi đang cố gắng giả lập một cuộc gọi chức năng và hy vọng nó sẽ gọi một chức năng khác trong đó một lần.Jest - chế nhạo một cuộc gọi chức năng

myFunctions.test.js

import { resetModal } from '../myFunctions.js'; 

describe('resetModal',() => { 
    it('calls the clearSomethingInModal function',() => { 
    const clearSomethingInModal = jest.fn(); 
    resetCreationModal(); 
    expect(clearSomethingInModal.mock.calls.length).toBe(1); 
    }) 
}) 

myFunctions.js

export resetModal() { 
    clearSomethingInModal() 
} 

Tuy nhiên, sản lượng đùa nói rằng nó đã không được gọi. Nếu bất cứ ai có thể đề nghị cách tốt nhất để làm điều này, tôi sẽ rất biết ơn.

Trả lời

16

Liều tiếp cận của bạn không hoạt động vì bạn chỉ giả chế clearSomethingInModal chỉ trong ngữ cảnh tệp thử nghiệm của bạn, vì vậy clearSomethingInModal trong số myFunction.js vẫn là bản gốc. Điểm chính là bạn không thể giả lập một cái gì đó được tạo trực tiếp trong myFunction.js. Điều duy nhất mà bạn có thể thử là

  1. module mà bạn nhập vào myFunction.js, như import clearSomethingInModal from 'clearSomethingInModal'
  2. callbacks mà bạn vượt qua thành chức năng của mình khi gọi họ từ thử nghiệm của bạn

này có ý nghĩa nếu bạn suy nghĩ về myFunction.js làm hộp đen, nơi bạn có thể kiểm soát những gì xảy ra, như nhập khẩu hoặc đối số chức năng và nơi bạn có thể kiểm tra những gì xuất hiện. Nhưng bạn không thể kiểm tra những thứ xảy ra bên trong hộp.

Dưới đây là hai ví dụ mà phản ánh 2 điểm trong danh sách

myFunctions.test.js

import { resetModal } from '../myFunctions.js'; 
import clearSomethingInModal from 'clearSomethingInModal'; 

jest.mock('clearSomethingInModal',() => jest.fn()) 

describe('resetModal',() => { 
    it('calls the clearSomethingInModal function',() => { 
    resetCreationModal(); 
    expect(clearSomethingInModal.mock.calls.length).toBe(1); 
    }) 
}) 

myFunctions.js

import clearSomethingInModal from 'clearSomethingInModal'; 

export resetModal() { 
    clearSomethingInModal() 
} 

myFunctions.test.js

import { resetModal } from '../myFunctions.js'; 

describe('resetModal',() => { 
    it('calls the clearSomethingInModal function',() => { 
    const clearSomethingInModal = jest.fn(); 
    resetCreationModal(clearSomethingInModal); 
    expect(clearSomethingInModal.mock.calls.length).toBe(1); 
    }) 
}) 

myFunctions.js

export resetModal(clearSomethingInModal) { 
    clearSomethingInModal() 
} 
+1

Cảm ơn Andreas, đó là một lời giải thích tuyệt vời. Vì vậy, tôi lấy nó mà không thay đổi cấu trúc chức năng của tôi, tôi không thể kiểm tra theo cách tôi muốn. Vì vậy, (a) sẽ ngụ ý một vấn đề trong việc thiết kế các chức năng, và (b), trong hình thức hiện tại của nó, sẽ có bất kỳ thử nghiệm hợp lệ mà bạn có thể áp dụng cho nó? Lưu ý rằng hàm 'resetModal' cũng gọi một số hàm khác bên trong nó mà tôi đã bỏ qua cho ngắn gọn –

Các vấn đề liên quan