React Jest创建错误"新错误(' ...')"退出并立即测试失败

时间:2017-07-24 17:38:10

标签: reactjs jestjs

我是Jest和React的新手,正在为React网络项目设置Jest单元测试,当我尝试在异步调度上执行此操作时遇到此问题。只要有新的错误(...),测试用例就会退出并在执行该行时失败。 (它从运行到jest-jasmine2模块的测试用例开始,执行时出现新的错误。然后我直接在我的测试用例中尝试新的错误,它也失败了......)。当npm开始时,没有任何错误发生,但只有当npm测试时,才会发生这种情况。

./__ TEST __ / action.test.js

import * as actions from '../actions';
import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk'

const middlewares = [ thunk ];
const mockStore = configureMockStore(middlewares);


describe('signIn dispatch action',()=>{
let store
beforeEach(()=>{
    store = mockStore({})
    window.fetch =jest.fn()
})
it('successful2 login', async ()=>{
    const response = '{...}'
    window.fetch.mockImplementationOnce (
        () => Promise.resolve({json: () => Promise.resolve(JSON.parse(response))})
    );
    await store.dispatch(actions.signIn({email:"a@a.com",password:"123"}))
})

it('fail login', () => {

    window.fetch =jest.fn()
    const error = new Error("blahblahblah")
    window.fetch.mockImplementationOnce(
        () => Promise.reject(error)
    );
    return store.dispatch(actions.signIn({email: "", password: ""}, onSuccess))
        .then(() => {
        })
})
})

npm测试输出

● signIn dispatch action › successful2 login

Failed: [object Object]

  at stackFormatter (node_modules/jest-jasmine2/build/expectationResultFactory.js:30:20)
  at process._tickCallback (internal/process/next_tick.js:109:7)

● signIn dispatch action › fail login

blahblahblah

  at Object.it (src/actions/__test__/actions.test.js:117:23)
  at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)
  at process._tickCallback (internal/process/next_tick.js:109:7)

的package.json

"devDependencies": {
"babel-jest": "^20.0.3",
"babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"babel-preset-stage-2": "^6.24.1",
"enzyme": "^2.9.1",
"enzyme-to-json": "^1.5.1",
"jest": "^20.0.4",
"jest-immutable-matchers": "^1.5.0",
"react-addons-test-utils": "^15.6.0",
"react-dom": "^15.6.1",
"react-scripts": "^1.0.10",
"react-test-renderer": "^15.6.1",
"redux-devtools": "^3.3.1",
"redux-devtools-dock-monitor": "^1.1.1",
"redux-devtools-log-monitor": "^1.1.1",
"redux-mock-store": "^1.2.3"
},

.babelrc

{
"presets":["react","es2015","stage-0","stage-2"]
}

1 个答案:

答案 0 :(得分:2)

我知道这个问题是8个月大。如果你仍然需要它,或任何偶然发现这个问题的人:

当我尝试创建自定义错误时,我在测试中看到了同样的问题。事实证明,这是因为我的测试用例失败了,Jest指出了失败的测试用例以及创建错误的位置。

确保您的测试不会抛出您创建的错误对象,并确保在发生错误时抓住它。

在上面的代码中

window.fetch.mockImplementationOnce(
        () => Promise.reject(error)
    );

确保thunk捕获错误