Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在玩笑中测试rsvp承诺_Javascript_Babeljs_Jestjs_Rsvp.js_Rsvp Promise - Fatal编程技术网

Javascript 无法在玩笑中测试rsvp承诺

Javascript 无法在玩笑中测试rsvp承诺,javascript,babeljs,jestjs,rsvp.js,rsvp-promise,Javascript,Babeljs,Jestjs,Rsvp.js,Rsvp Promise,我一直在为使用rsvp承诺的代码编写单元测试。 我尝试使用pit测试,但没有成功通过rsvp的测试,但是嵌入的承诺效果很好: //jest.autoMockOff(); - even with this rsvp test is failing jest.unmock('rsvp'); import rsvp from 'rsvp'; describe('my rsvp tests', () => { // this test fails pit('testing rsvp

我一直在为使用rsvp承诺的代码编写单元测试。 我尝试使用
pit
测试,但没有成功通过rsvp的测试,但是嵌入的承诺效果很好:

//jest.autoMockOff(); - even with this rsvp test is failing
jest.unmock('rsvp');

import rsvp from 'rsvp';

describe('my rsvp tests', () => {

  // this test fails
  pit('testing rsvp promise', () => {
    return new rsvp.Promise((resolve) => {
      resolve("getting something");
    }).then(()=> { expect(1).toBe(1); });
  });

  // this test passes
  pit('testing pure promise', () => {
    return new Promise((resolve) => {
      resolve("getting something");
    }).then(()=> { expect(1).toBe(1); });
  });
});
my package.json中的相关详细信息:

"rsvp": "^3.2.1",
"babelify": "^7.2.0",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"babel-preset-stage-0": "^6.5.0",
"babel-jest": "^9.0.0",
"jest-cli": "*"
 ...
"scripts": {
  "test": "jest"
},

"jest": {
  "unmockedModulePathPatterns": [
    "<rootDir>/node_modules/react",
    "<rootDir>/node_modules/react-dom",
    "<rootDir>/node_modules/react-addons-test-utils"
  ]
}
我看到了两种可能的解决办法,但都不喜欢:

  • 通过使用嵌入式承诺模拟rsvp承诺。缺点:单元测试将变得更加冗长,我需要模拟其他函数,如rsvp。所有我不想做的事情
  • 从rsvp迁移到嵌入式承诺。这是可能的,但是我已经使用了一个依赖于rsvp的库来发出ajax请求。我也不确定嵌入的承诺是否可以取代rsvp提供的所有功能(例如“all”和其他helper函数)

  • 我找到了一个解决方案——或者说,更好的说法,一个变通办法。简而言之:不需要使用pit方法,它们可以替换为“it”,但在完成之前,所有计时器都应该运行,可以通过调用jest.runAllTimers()来完成


    这不是一个优雅的解决方案,因为我看不出rsvp承诺与“嵌入式”承诺相比有什么不应该开玩笑的原因,但至少它是有效的。

    也许你应该提交一个bug?
    {
      "presets": ["es2015", "react", "stage-0"]
    }