我一直在为使用rsvp promises的代码编写单元测试。
我尝试使用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); });
  });
});


来自我的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"
  ]
}


.babelrc:

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


我看到了两种可能的解决方法,但都不是:


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

最佳答案

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

这不是一个很好的解决方案,因为我看不出rsvp承诺不应该与“嵌入式”承诺开玩笑的任何理由,但至少可以奏效。

关于javascript - 无法在笑话中测试rsvp许诺,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36214027/

10-12 12:25