首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在玩笑中测试rsvp承诺

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

Stack Overflow用户
提问于 2016-03-25 04:30:12
回答 1查看 133关注 0票数 1

我一直在为使用rsvp承诺的代码编写单元测试。我试图使用pit测试,但没有成功地通过rsvp的测试,尽管嵌入式承诺工作得很好:

代码语言:javascript
复制
//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的相关细节:

代码语言:javascript
复制
"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:

代码语言:javascript
复制
{
  "presets": ["es2015", "react", "stage-0"]
}

我看到了两种可能的解决办法,但它们都不一样:

  1. 通过使用嵌入式承诺来模拟rsvp承诺。缺点:单元测试将变得更加冗长,我需要模拟另一个函数,比如我不想做的rsvp.all。
  2. 从rsvp迁移到嵌入式承诺。不过,我可能已经使用了一个依赖于rsvp的库,该库生成ajax请求。我也不确定嵌入式承诺是否能取代rsvp提供的一切(比如'all‘和其他帮助函数)。
EN

回答 1

Stack Overflow用户

发布于 2016-03-27 01:12:39

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

这不是一个优雅的解决方案,因为我没有看到任何理由,为什么rsvp承诺不应该在开玩笑而不是‘嵌入式’的,但至少它的工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36214027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档