reactjs - không thể đọc thuộc tính __mobxInstanceCount trên giá trị boolean 'true' các trường hợp kiểm thử đang thất bại trên typescript và mobx
TypeError: Không thể tạo thuộc tính '__mobxInstanceCount' trên boolean 'true'
at Object.<anonymous> (node_modules/mobx/lib/mobx.js:2620:38)
at Object.<anonymous> (src/Stores/DashboardStore.ts:9:14)
at Object.<anonymous> (src/__tests__/DashboardStore.test.ts:3:24)
Test Suites: 1 failed, 1 total
mobx.js:2620 mentions about global multiple instance.
Dashboard.test.ts import DashboardStore từ '../Stores/DashboardStore';
describe('DashboardStore', () => {
let dashboardStore;
beforeEach(() => {
dashboardStore = DashboardStore;
});
// tslint:disable-next-line:no-console
console.log(dashboardStore);
});
FAIL src\__tests__\DashboardStore.test.ts
? Test suite failed to run
Yêu cầu của tôi là cung cấp một số gợi ý về cách kiểm thử đơn vị một thành phần và kho. Cảm ơn bạn.
Câu trả lời #1
Tôi không biết tại sao, đối với tôi đó là một vấn đề trong tệp cấu hình jest, khi tôi cố gắng khai báo window là global.
Câu trả lời #2
Có vẻ như mã của bạn đã nhập mobx nhiều lần (nhìn vào nơi lỗi này xuất phát).
Các tin nhắn dường như bắt nguồn từ đây từ nguồn: https://github.com/mobxjs/mobx/blob/master/src/core/globalstate.ts
Lỗi chỉ xảy ra nếu __mobxInstanceCount đã được đặt, điều này có nghĩa là có 2 tệp globalstate.ts khác nhau được bao gồm (có thể là 2 phiên bản khác nhau của mobx?)
mẹo bổ sung
Tôi không chắc về jest, nhưng với mocha, các bài kiểm tra có thể chạy cùng lúc. Điều này có nghĩa là beforeEach trong trường hợp này không phải lúc nào cũng đảm bảo một biến dashboardStore sạch sẽ. (beforeEach có thể chạy hai lần và sau đó 2 bài kiểm tra có thể chạy, gây ra vấn đề, vì chỉ có một biến dashboardStore và nó được ghi đè mỗi lần gọi beforeEach()).
Phương pháp tiêm
Nếu bạn thực sự muốn tạo các bài kiểm tra đơn vị cho các thành phần React của mình, tôi khuyên nên trừu tượng hóa thay vì sử dụng trực tiếp cửa hàng MobX bằng cách sử dụng hàm @inject thay vào đó: https://github.com/mobxjs/mobx-react#inject-as-function
Bằng cách này bạn không cần phải mô phỏng bất kỳ Store nào của mobx, mà chỉ cần chèn các props cần thiết vào các component của react. (giữ cho các component của bạn mang tính khai báo hơn về những gì chúng thực sự cần.)