2016-12-11 4 views
1

私はReactアプリケーションをテストしています。これは基本的に公式に祝福された標準create-react-appの設定に従っています。次のようになぜ私の `反応スクリプト`テストはJest関数 `toMatchObject`を認識しませんか?

は、私は私のテストを書かれている:

{ 
    ... 
    "devDependencies": { 
    "enzyme": "^2.6.0", 
    "react-scripts": "0.8.3", 
    ... 
    }, 
    "dependencies": { 
    "react": "^15.4.1", 
    ... 
    }, 
    "scripts": { 
    "test": "react-scripts test --env=jsdom", 
    ... 
    }, 
    "jest": { 
    "automock": false 
    } 
} 

私は、次のエラーメッセージが表示されますテストを実行

TypeError: expect(...).toMatchObject is not a function

import React from 'react'; 
import {shallow} from 'enzyme'; 

import MyComponent from './MyComponent'; 

describe('MyComponent',() => { 
    it('should have the expected properties',() => { 
     const wrapper = shallow(<MyComponent/>); 
     expect(wrapper.props()).toMatchObject({a: 1}); 
    }); 
}); 

私のpackage.jsonには、以下が含まれています。

ただし、react-scripts documentationには、Jestが使用されるビルトインツールの1つであると記載されています。私はnpm installする必要はありません。 Jest documentationは、toMatchObjectであることを明確に示しています。

なぜこのエラーメッセージが表示されますか?

答えて

2

tl; dr:最新の(v18 +)ジョブを得るにはを実行してください。初期の2016年12月における

オリジナルの答えは:

私は、これは冗談自体に問題があることを発見しました。それはhereと記載されています。私が正しく読んだら、バグではありません。実際に公開する準備が整う前に、ドキュメンテーションに組み込まれた機能です。どうやら、今はいつでも出てくるはずです。その間、誰か(Jestチームか他の誰か)がヘルパーを提供しました。このヘルパーは正式に利用可能になるまでhereと記されています。私は実際にこのヘルパーを試していない、とすぐに消えるかもしれないと思うが、私は本当にこの機能がほしいと思ったら興味のある読者にそれについて知ってもらえると思った。初期の2017年1月における

更新:?

this websiteによるtoMatchObjectマッチャーは、それが18.1で、現在の...約1月3日、冗談のV18(18.0.0のためだった2017年に冗談に含まれていました.0)。これは基本的なReactのダウンロードにはまだ含まれていませんでした。私のnode_modulesフォルダを削除してnpm install -edをすべて削除しても、このマッチャーがまだ機能しませんでした。しかし、具体的にとjestを更新した場合、node_modules/jest/package.jsonは今jestが更新されたことを示しています(私にとっては2017年1月15日にバージョン18.1.0に更新されました)。toMatchObjectが動作するようです。

...実は、上の段落内の溶液は、気まぐれなようで、それはは私が最初にそれを使用する場合仕事をしましたが、その後まもなく、その後再び動作を停止して(後にもう一度再削除node_modulesnpm install INGを再npm install jestをやり直して、コメントから@ Scimonsterの提案を試みても、すなわちnode_modules/react-scripts/node_modules/jestを削除すること)。実際にtoMatchObjectのコードをhereからnode_modules/react-scripts/node_modules/jest-matchers/build/matchers.jsに手動で追加する(ES6/typescript/babel?-ish構文を元に戻してから)、別の作業ハックを見つけました。私はこれがReactへのあまりにも遠すぎる更新ではすべて修正されるだろうと推測していますが、今のところこれは私のために働いています(少なくとも現時点では!)。

+0

'npm install jest'を試しましたが、更新されているようですが、' toMatchObject'はまだ動作しません。'$(npm bin)/ jest --version'を実行すると' v18.1.0'になりますが、 'npm test --version'は' v17.0.3'です。うーん。 – Scimonster

+1

更新: 'node_modules/react-scripts/node_modules/jest'を削除して削除しました。 – Scimonster

+0

@Scimonster、私はあなたの言っていることをエコーし​​て、つまりnpm install jestが問題を一貫して解決していないように、私の答えを再び更新しました。私の答えには、ソリューションを手に入れることができなかったので、私のために働かせるためのハッキングが追加されました。しかし、助けてくれてありがとう。多分それは他人を助けるでしょう。 –

関連する問題