2017-05-30 114 views
2

我得到的是TypeError: (0 , _expect2.default)(...).toBeDefined is not a function,通常的解決方法是將/'​​node_modules'/更改爲不使用引號。這沒有幫助。輸出是TypeError:(0,_expect2.default)(...)。toBeDefined不是函數

$ jest 
FAIL __tests__/test_fake_add_component.js 
    ● Add fake tests › Add › Add requires onAdd prop 

    TypeError: (0 , _expect2.default)(...).toBeDefined is not a function 

     at Object.<anonymous> (__tests__/test_fake_add_component.js:20:54) 
     at process._tickCallback (internal/process/next_tick.js:109:7) 

    ● Add fake tests › Add › Add renders button 

    TypeError: (0 , _expect2.default)(...).toBeDefined is not a function 

     at Object.<anonymous> (__tests__/test_fake_add_component.js:25:43) 
     at process._tickCallback (internal/process/next_tick.js:109:7) 

PASS __tests__/test_BasicAnchorTag_enzyme.js 
PASS __tests__/test_fake_list_component.js 
PASS __tests__/test_hello_world_snapshot.js 

Test Suites: 1 failed, 3 passed, 4 total 
Tests:  2 failed, 6 passed, 8 total 
Snapshots: 1 passed, 1 total 
Time:  2.512s 
Ran all test suites. 

Add.js

import React, { Component } from 'react'; 


export default class Add extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
     name: '' 
     }; 
     this.handleAdd = this.handleAdd.bind(this); 
    } 

    handleAdd(e) { 
     e.preventDefault(); 
     this.props.onAdd(this.state.name); 
    } 

    render() { 
     return (
     <form> 
      <input 
      type="text" 
      name="name" 
      value={this.state.name} 
      onChange={e => this.setState({ name: e.target.value })} 
      > 
      </input> 
      <button onClick={this.handleAdd}>Add</button> 
     </form> 
    ); 
    } 
} 

test_fake_add_component.js

import React from 'react'; 
import expect from 'expect'; 
import { shallow, mount } from 'enzyme'; 

import Add from '../client/components/fake/Add'; 


describe('Add fake tests',() => { 

    describe('Add',() => { 
     let add; 
     let onAdd; 

     beforeEach(() => { 
      onAdd = jest.fn(); 
      add = mount(<Add onAdd={onAdd} />); 
     }); 

     it('Add requires onAdd prop',() => { 
      expect(add.props().onAdd).toBeDefined(); 
     }); 

     it('Add renders button',() => { 
      const button = add.find('button').first(); 
      expect(button).toBeDefined(); 
     }); 


    }); 
}); 

webpack.config.dev.js

var webpack = require('webpack'); 

module.exports = { 
    //devtool: 'inline-source-map', 
    entry: [ 
    'webpack-hot-middleware/client', 
    './client/main.js' 
    ], 
    output: { 
    path: require("path").resolve('./assets'), 
    filename: 'bundle.js', 
    publicPath: '/' 
    }, 
    plugins: [ 
    new webpack.HotModuleReplacementPlugin() 
    ], 
    externals: { 
     jquery: 'var jQuery' 
    }, 
    module: { 
    loaders: [ 
     { 
     test: /\.jsx?$/, 
     loader: 'babel-loader', 
     exclude: /node_modules/, 
     query: { 
      presets: ['react', 'es2015', 'react-hmre'], 
      plugins: ['transform-decorators-legacy'] 
     } 
     }, 
     { 
      include: /\.json$/, 
      loader: 'json-loader' 
     }, 
     { 
     test: /\.css$/, 
     loader: 'style-loader!css-loader', 
     exclude: /node_modules/ 
     }, 
     { 
     test: /\.scss$/, 
     loader: 'style-loader!css-loader!sass-loader', 
     exclude: /node_modules/ 
     } 
    ] 
    } 
}; 

webpack.config.js

var webpack = require('webpack'); 
var path = require('path'); 
var CopyWebpackPlugin = require('copy-webpack-plugin'); 
var copyAssets = new CopyWebpackPlugin([{from: './assets'}]); 

module.exports = { 
    //devtool: 'inline-source-map', 
    entry: './client/main.js', 
    output: { 
    path: path.resolve('./assets'), 
    filename: 'bundle.js', 
    publicPath: '/' 
    }, 
    plugins: [copyAssets], 
    externals: { 
     jquery: 'var jQuery' 
    }, 
    module: { 
    loaders: [ 
     { 
     test: /\.jsx?$/, 
     loader: 'babel-loader', 
     exclude: /node_modules/, 
     query: { 
      presets: ['react', 'es2015'], 
      plugins: ['transform-decorators-legacy'] 
     } 
     }, 
     { 
     include: /\.json$/, 
     loader: 'json-loader' 
     }, 
     { 
     test: /\.css$/, 
     loader: 'style-loader!css-loader', 
     exclude: /node_modules/ 
     }, 
     { 
     test: /\.scss$/, 
     loader: 'style-loader!css-loader!sass-loader', 
     exclude: /node_modules/ 
     } 
    ] 
    } 
}; 

我不知道哪一個使用,我就跑jest

.babelrc

{ 
    "plugins": ["transform-object-rest-spread"], 
    "presets": ["es2015", "react"] 
} 

{ 
    "name": "my-portal", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1", 
    "build": "webpack", 
    "start": "python app.py", 
    "devserver": "webpack-dev-server" 
    }, 
    "author": "", 
    "license": "ISC", 
    "devDependencies": { 
    "babel-core": "^6.4.5", 
    "babel-jest": "^20.0.3", 
    "babel-loader": "^6.2.1", 
    "babel-plugin-transform-object-rest-spread": "^6.22.0", 
    "babel-preset-es2015": "^6.3.13", 
    "babel-preset-react": "^6.3.13", 
    "babel-preset-react-hmre": "^1.1.1", 
    "coffee-loader": "^0.7.3", 
    "coffeescript": "^1.12.6", 
    "css-loader": "^0.28.0", 
    "enzyme": "^2.8.2", 
    "expect": "^1.20.2", 
    "jest": "^20.0.4", 
    "morgan": "^1.7.0", 
    "node-sass": "^4.5.2", 
    "react-addons-test-utils": "^15.5.1", 
    "react-test-renderer": "^15.5.4", 
    "sass-loader": "^6.0.3", 
    "style-loader": "^0.16.1", 
    "webpack": "^2.0.0", 
    "webpack-dev-middleware": "^1.9.0", 
    "webpack-dev-server": "^1.16.2", 
    "webpack-hot-middleware": "^2.15.0" 
    }, 
    "dependencies": { 
    "babel-plugin-transform-decorators-legacy": "^1.3.4", 
    "babel-polyfill": "^6.23.0", 
    "body-parser": "^1.16.0", 
    "bootstrap-daterangepicker": "^2.1.25", 
    "clipboard": "^1.6.1", 
    "copy-webpack-plugin": "^4.0.1", 
    "dotenv": "^4.0.0", 
    "express": "^4.14.0", 
    "fs": "0.0.1-security", 
    "highcharts": "^5.0.10", 
    "json-loader": "^0.5.4", 
    "moment": "^2.17.1", 
    "moment-timezone": "^0.5.11", 
    "morgan": "^1.7.0", 
    "path": "^0.12.7", 
    "prop-types": "^15.5.8", 
    "react": "^15.4.0", 
    "react-addons-test-utils": "^15.4.0", 
    "react-bootstrap": "^0.30.7", 
    "react-bootstrap-datetimerangepicker": "^2.0.3", 
    "react-bootstrap-modal": "^3.0.1", 
    "react-data-components": "^1.1.0", 
    "react-dom": "^15.4.0", 
    "react-redux": "^5.0.2", 
    "react-router": "^3.0.2", 
    "react-simpletabs": "^0.7.0", 
    "react-tabs": "^0.8.2", 
    "redux": "^3.6.0", 
    "redux-logger": "^2.8.1", 
    "redux-promise-middleware": "^4.2.0", 
    "redux-sequence-action": "^0.2.1", 
    "redux-thunk": "^2.2.0", 
    "sendgrid": "^5.0.1", 
    "underscore": "^1.8.3", 
    "whatwg-fetch": "^2.0.2" 
    } 
} 

回答

4

你可能讀笑話文檔和您正在使用expect ...如果您打算使用jewa anywa,最簡單的解決方案可能只是刪除import expect from 'expect'; ys--或者如果您想使用expect,請查看toExist()函數。

希望它有幫助。

+0

這是爲什麼?笑話是否帶有自己的期望庫? – codyc4321

+2

是的。 https://facebook.github.io/jest/docs/expect.html –

相關問題