簡體   English   中英

替換或模擬導入另一個文件

[英]Substitute or mock import of another file

我想在不改變foo.js的情況下使用 Jest 測試foo.js中的函數。 不想測試像getBaseOs這樣的原生函數。 只需從foo.js導入 function 即可評估foo.js的所有導入語句。 任何依賴本機代碼的導入都會觸發錯誤,並且測試不會運行。

有沒有辦法替代getBaseOs之類的導入,但只能在測試文件foo.test.js中替換? 我只是想忽略getBaseOs中的foo.test.js以允許測試。 即使替換不是辦法,有沒有辦法做到這一點?

// foo.js
import React from 'react';
import { View, } from 'react-native';
import { getBaseOs, } from 'react-native-device-info';

export default function foo(props) {
  return null;
}

// foo.test.js
import 'react-native';
import foo from './foo';

describe('test import substitution', () => {
  it('test getBaseOs', () => {
    const getBaseOs = jest.fn();
    expect(true).toBe(true);
  });
});

我剛剛在 2019 年 6 月 20 日發表評論的用戶 karimo255 在GitHub上找到了答案。只需將代碼放在__mocks__/react-native-device-info.js中,盡管導入了代碼,也可以在測試中替換代碼。 我推測 Jest 在執行單個測試之前從__mocks__導入文件,並將文件的名稱與要匹配的導入名稱匹配。 重命名文件會破壞它。

這是替換react-native-device-info的導入語句的文件, __mocks__/react-native-device-info.js

export default {
  getBaseOs: () => 'A',
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM