2017-01-11 14 views
2

のは、我々はこのステートレスなコンポーネントプライベートなステートレスコンポーネントの機能をテストする最良の方法は何ですか?

import React from ‘react’; 

const HelloWorld = ({name}) => (

    const sayHi = event => { 
    alert(`Hi ${name}`); 
    } 

    return (
    <div> 
     <a 
     href="#" 
     onClick={sayHi}>Say Hi</a> 
    </div> 
); 
); 

export default HelloWorld; 

sayHi機能をテストする最善のアプローチは何を持っているとしましょうか?
私はユニットテストを行うことを知っています。

+1

ステートレス機能はまだ機能です。あなたは、それがスズについて何をしているかを確かめたいのですが、非正常的な入力では面白い何かをしません。実際には仮想DOMなどで何かを実行します。ステートレスにしてもテストの性質は変わりませんしなければなりません。多分私はあなたの質問を理解していません。 –

+0

@AkshatMahajanステートレス関数については実際にはありません。 私は外部から(テストフレームワークから)アクセスすることができないので、上記の例で 'sayHi'関数をテストするための最良の方法は何ですか? – JoseAPL

答えて

1

Jest docsを見ると、これはかなり簡単です。基本的には、クリックをシミュレートしてalertコールを偽装/スパイしたいとします。

大体このような何か:

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

test('that alert is called when clicking link',() => { 

    const testName = 'Jack'; 
    // Render a checkbox with label in the document 
    const hw = shallow(
    <HelloWorld name={testName} /> 
); 

    const alert = jest.fn(); 

    hw.find('a').simulate('click'); 
    expect(alert).toBeCalledWith('Hi ' + testName); 
}); 
+0

これは良いアプローチですが、私が避けたいのは、HTMLイベントを通じて自分のプライベート関数にアクセスすることです。 さらに、これはすでにE2Eテストではありません。単体テストとE2Eテストを組み合わせるのがよいでしょうか? – JoseAPL

+0

@JoseAPL「HTMLイベントを通じてあなたの私的な機能へのアクセスを避けたい」と言いたいことについては、わかりません。私が理解したコードは、提供したコンポーネントをテストする方法です。さらに、ユニットとE2Eのテストを組み合わせるのは良い方法ではないと私は理解していますが、ここでユニットテストがどこに出てくるのかは分かりません。 – Jack

関連する問題