我是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"]
}
答案 0 :(得分:2)
我知道这个问题是8个月大。如果你仍然需要它,或任何偶然发现这个问题的人:
当我尝试创建自定义错误时,我在测试中看到了同样的问题。事实证明,这是因为我的测试用例失败了,Jest指出了失败的测试用例以及创建错误的位置。
确保您的测试不会抛出您创建的错误对象,并确保在发生错误时抓住它。
在上面的代码中
window.fetch.mockImplementationOnce(
() => Promise.reject(error)
);
确保thunk捕获错误