簡體   English   中英

單元測試時模擬ES6依賴項

[英]Mock ES6 dependencies when unit testing

假定以下兩個ES6類:

my-random.js:

export default class MyRandom {
    get() { return Math.random(); }
}

app.js:

import MyRandom from './random';

export default class App {
    get() {
        let r = new MyRandom();
        let total = r.get() * r.get(); // Complex calc goes here!
        return total;
    }
}

現在,我想對來自app.jsget進行單元測試。 所以我想嘲笑MyRandom 為此,我發現了一個非常有趣的庫Mocktail

根據文檔,您應該將my-random.js更改為

import {mock} from 'mocktail';
class MyRandom {
    get() { return Math.random(); }
}
export default mock(MyRandom);

在測試文件中,您必須按照以下步驟告訴環境您正在測試:

import {env, ENV, inject} from 'mocktail';
env(ENV.TESTING);

class MyRandomMock {
    get() {
        return 10; // Not so random anymore
    }
}
inject('MyRandom', MyRandomMock);

並且您應該能夠測試app.js 不幸的是,當我嘗試使用MyRandom時,它永遠不會被模擬類所替代。 任何幫助,將不勝感激!!

我在這里的 github上設置了一個測試項目來演示該問題。 如您所見,測試將失敗:(

如果有更好的方法來實現我所需要的,請告訴我!

我認為您需要在測試文件中的App之前導入setup ,這將注入模擬並在App中調用它。

import './setup';    
import App from '../src/app';

暫無
暫無

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

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