2015-11-23 16 views
5

किसी को चमेली/हंसी es2015 सिंटैक्स का उपयोग परीक्षण लेखन किया गया है? कितना shimming/polyfill/gerrymandering की आवश्यकता है?कोलाहल-हंसी ES2015 आयात बयान

मैं आयात करने में समस्या आ रही है कार्यों को सही ढंग से। । .../utils/TweetUtils.js

'use strict'; 

export function getListOfTweetIds (tweets) { 
    return Object.keys(tweets); 
}; 

और एक टेस्ट स्वीट: मैं एक मॉड्यूल है

... ./__ परीक्षण __/TweetUtils-test.js

'use strict'; 
jest.dontMock('../TweetUtils'); 
import * as TweetUtils from '../TweetUtils'; 

describe('Tweet utilities module',() => { 

    it('has access to the TweetUtils methods',() => { 

    let testObj = {a:'a',b:'b',c:'c'}; 
    // Passes 
    expect(TweetUtils.getListOfTweetIds).toBeDefined(); 
    // Passes 
    expect(typeof TweetUtils.getListOfTweetIds).toBe('function'); 
    // Fails 
    expect(TweetUtils.getListOfTweetIds(testObj)).toBeTruthy(); 
    }); 
}); 

मैं कुछ इस तरह के साथ सुइट में एक सांत्वना उत्पादन हैक हैं: expect(‘’).toBe(TweetUtils);

जैस्मीन इस रिपोर्ट:

- Expected: '' toBe: { 
     default: { 
      getListOfTweetIds: Function 
     }, 
     getListOfTweetIds: Function 
    } 

तो ऐसा लगता है इंपोर्ट स्टेटमेंट की तरह कुछ कर रही है, लेकिन यह स्पष्ट रूप से ईमानदारी से मेरी तरीकों का आयात नहीं कर रहा है। मैं जब मैं नामित समारोह सिंटैक्स का उपयोग आयात एक ही परिणाम प्राप्त: import {getListOfTweetIds} from ‘../TweetUtils’; लेकिन अगर मैं डिफ़ॉल्ट सिंटैक्स का उपयोग करें: import getListOfTweetIds from ‘../TweetUtils’; दूसरा कल्पना में विफल रहता है - यह अब typeof function नहीं है, लेकिन typeof object // => {default: Function}

मैं डॉक्स में कंघी कर रहे हैं और खुले मामले। कुछ महीनों के लिए संबंधित मुद्दे रहे हैं, लेकिन ज्ञात मुद्दे सही नहीं लगते हैं। मैंने hoisting से बचने के लिए अपने jest.dontMock कथन आयात करने का प्रयास किया है, लगभग: https://github.com/babel/babel-jest/issues/16 लेकिन कोई पासा नहीं।

सब कुछ काम करता है अगर मैं TweetUtils.jsmodule.exports = function… उपयोग करें और यह सूट const myFunction = require(‘../TweetUtils’) का उपयोग कर में लाने के लिए संशोधित, लेकिन जैसे मैं सच ES2015 जादू channeling हूँ यह महसूस नहीं करता है। क्या पारिस्थितिक तंत्र नए वाक्यविन्यास तक पहुंचने पर हर कोई सिर्फ भद्दा कार्य-आसपास से निपट रहा है?

उत्तर

4

जैसा कि आपने कहा, import बयान फहराया रहे हैं और यह (मॉड्यूल आयात किया जाता है इससे पहले कि आप unmocked को हंसी बता) हंसी ऑटो मजाक की सुविधा के साथ समस्याओं का कारण बनता।

TweetUtils.getListOfTweetIds सही ढंग से आयात किया गया है लेकिन यह मजाक है, इसलिए प्रत्येक कॉल undefined लौटाती है। यही कारण है कि तीसरी उम्मीद विफल हो जाती है।

आयात कर रहा है jest.dontMock बयान काम कर सकता था (मैं इसे परीक्षण किया), लेकिन यह मेरे लिए गंदा लगता है आप require सिंटैक्स का उपयोग करने के लिए है (आप वास्तव में प्रत्येक परीक्षा मॉड्यूल के लिए एक "dontmock मॉड्यूल" फ़ाइल बनाने के लिए करना चाहते हैं?)

परीक्षण मॉड्यूल के लिए। jest#379

+0

मेरे मामले में यह केवल काम किया जब मैं .DEFAULT जोड़ा में: बदलें

import * as TweetUtils from '../TweetUtils'; 

द्वारा

const TweetUtils = require('../TweetUtils'); 

यह इससे पहले कि मैं यह तय हंसी उदाहरण में ही था 'स्थिरांक TweetUtils = की आवश्यकता होती है ('../ TweetUtils') डिफ़ॉल्ट;। ' – vitalets

संबंधित मुद्दे