2017-12-02 19 views
4

私はJestの初心者です。私は自分のものを嘲笑してしまったが、モジュールを嘲笑しているようだ。特にコンストラクタ。私はテストでは、このような何かをしたいと思います依存関係のコンストラクタをモックするJest

const AWS = require("aws-sdk") 
cw = new AWS.CloudWatch({apiVersion: "2010-08-01"}) 
... 
function myMetrics(params) { 
    cw.putMetricData(params, function(err, data){}) 
} 

usage.js

const AWS = jest.mock("aws-sdk") 
class FakeMetrics { 
    constructor() {} 
    putMetricData(foo,callback) { 
    callback(null, "yay!") 
    } 
} 

AWS.CloudWatch = jest.fn((props) => new FakeMetrics()) 

しかし、私はCWは私が任意のポインタのためのGREATFULだろうので、私のアプローチは、「慣用未満」であるかもしれないことを認識しmockConstructorないFakeMetrics

あるusage.jsでそれを使用するために来るとき。

この問題は、モジュールが嘲笑されている方法である最小の例https://github.com/ollyjshaw/jest_constructor_so

npm install -g jest

jest

+1

それはのようなものでなければなりません。 http://stackoverflow.com/help/mcveを提供してください。 – estus

+0

Thanks estus。実行可能なサンプルをここに追加しました。https://github.com/ollyjshaw/jest_constructor_so –

答えて

2

あります。 the referenceの状態では、

が必要なときにオートモックされたバージョンのモジュールをモックします。 < ...> 連鎖のjestオブジェクトを返します。

AWSは、モジュールのオブジェクトが、jestオブジェクトではない、とAWS.CloudFormationを割り当てることは何も影響を与えません。

また、CloudWatchは1つの場所にあり、CloudFormationは別の場所にあります。

テストフレームワークはモック関数を再開発する必要はありませんが、すでに存在しています。

const AWS = require("aws-sdk"); 
const fakePutMetricData = jest.fn() 
const FakeCloudWatch = jest.fn(() => ({ 
    putMetricData: fakePutMetricData 
}));       
AWS.CloudWatch = FakeCloudWatch; 

などアサート:それはjest.mockがusage.jsの評価に先行していることは明らかではありません

expect(fakePutMetricData).toHaveBeenCalledTimes(1); 
+0

それは、ありがとう! –

+0

私の混乱は確かにこのビットでした。 "AWSはモジュールオブジェクトではなくジストオブジェクトであり、AWS.CloudFormationを割り当てることは何の影響も与えません。" –

+1

ようこそ。 – estus

関連する問題