2017-08-19 15 views
7

Tôi có một lớp dịch vụMock.mockImplementation() không làm việc

Service.js

class Service { 
} 
export default new Service(); 

Và tôi đang cố gắng để cung cấp một thực hiện mô hình cho việc này. Nếu tôi sử dụng một cái gì đó như thế này:

jest.mock('./Service',() => { ... my mock stuff }); 

Nó hoạt động tốt, tuy nhiên tôi không thể truy cập bất kỳ các biến khai báo bên ngoài giả, đó là một chút hạn chế như tôi muốn cấu hình lại những gì lợi nhuận giả vv

tôi cố gắng này (lấy cảm hứng từ bài viết này khác StackOverflow: Service mocked with Jest causes "The module factory of jest.mock() is not allowed to reference any out-of-scope variables" error)

import service from './Service'; 

jest.mock('./Service',() => jest.fn); 

service.mockImplementation(() => { 
    return { ... mock stuff } 
); 

Thật không may khi tôi đang cố gắng để chạy này, tôi nhận được báo lỗi dưới đây:

TypeError: _Service2.default.mockImplementation is not a function 
+0

Đây là dự án React Native (được thiết lập với ứng dụng tạo phản ứng-gốc-bản xứ, còn gọi là triển lãm), Jest là 20.0.4. Nút: 7.2.0, Npm: 5.3.0 – Janos

Trả lời

6

Mô hình bằng jest.fn. Bạn cần gọi jest.fn để tạo một hàm giả.

Vì vậy, đây:

jest.mock('./Service',() => jest.fn); 

nên là:

jest.mock('./Service',() => jest.fn()); 
+0

Điều này cũng không hoạt động. Trong trường hợp này service.mockImplementation thậm chí không tồn tại. – Janos

0

Bạn cần lưu trữ phần chế giễu của bạn trong một biến với một tên bắt đầu bằng "giả" và đảm bảo bạn quay lại một đối tượng với thuộc tính mặc định khi bạn nhập Dịch vụ của mình từ mặc định trong tệp "main.js".

// Service.js 
class Service { 
} 
export default new Service(); 

// main.test.js (main.js contains "import Service from './Service';") 

const mockService =() => jest.fn(); 

jest.mock('./Service',() => { 
    return { 
     default: mockService 
    } 
});