据我所知,
通过阅读这个问题,我得到了正确处理这个问题所需的信息,但是它没有告诉我为什么生成的
我已将其缩减到几乎所需的最低限度,以重现当时的环境并展示可行的替代方案:
import * as sinon from 'sinon';
import 'source-map-support/register';
class LocalObject {
}
const fakeObject = new LocalObject();
const getFakeApi = (result: Promise<LocalObject[]>) = ({getObjects: () => result});
const successObjectClient = getFakeApi(Promise.resolve([fakeObject]));
// These should be equivalent, but the former causes a test error
const failApiClient = getFakeApi(Promise.reject(new Error()));
const explicitFailApiClient = {
getObjects(): Promise<LocalObject[]> {
return Promise.reject(new Error());
}
};
describe('successApiClient', () => {
before(() => {
sinon.spy(successObjectClient, 'getObjects');
});
it('does not have a warning', async () => {
// do nothing
});
});
describe('failApiClient', () => {
before(() => {
sinon.spy(failApiClient, 'getObjects');
});
it('should not have a warning', async () => {
// do nothing
});
});
describe('explicitFailApiClient', () => {
before(() => {
sinon.spy(explicitFailApiClient, 'getObjects');
});
it('does not have a warning', async () => {
// do nothing
});
});
和的结果;tsc&&S;npm测试/代码>:
> internal-api@1.0.0 test /Users/./Projects/./node/internal-api
> grunt test
Running "test" task
Running "env:dev" (env) task
Running "simplemocha:unit" (simplemocha) task
(node:72101) UnhandledPromiseRejectionWarning: Error
at Object.<anonymous> (/Users/./Projects/./node/internal-api/src/test/unit/models/mvp.test.ts:21:57)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (/Users/./Projects/./node/internal-api/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at /Users/./Projects/./node/internal-api/node_modules/mocha/lib/mocha.js:222:27
at Array.forEach (<anonymous>)
at Mocha.loadFiles (/Users/./Projects/./node/internal-api/node_modules/mocha/lib/mocha.js:219:14)
at Mocha.run (/Users/./Projects/./node/internal-api/node_modules/mocha/lib/mocha.js:487:10)
at Object.<anonymous> (/Users/./Projects/./node/internal-api/node_modules/grunt-simple-mocha/tasks/simple-mocha.js:29:20)
at Object.<anonymous> (/Users/./Projects/./node/internal-api/node_modules/grunt/lib/grunt/task.js:255:15)
at Object.thisTask.fn (/Users/./Projects/./node/internal-api/node_modules/grunt/lib/grunt/task.js:73:16)
at Object.<anonymous> (/Users/./Projects/./node/internal-api/node_modules/grunt/lib/util/task.js:294:30)
at Task.runTaskFn (/Users/./Projects/./node/internal-api/node_modules/grunt/lib/util/task.js:244:24)
at Task.<anonymous> (/Users/./Projects/./node/internal-api/node_modules/grunt/lib/util/task.js:293:12)
at /Users/./Projects/./node/internal-api/node_modules/grunt/lib/util/task.js:220:11
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
at Function.Module.runMain (module.js:695:11)
at startup (bootstrap_node.js:191:16)
at bootstrap_node.js:612:3
(node:72101) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:72101) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
successApiClient
✓ does not have a warning
failApiClient
✓ should not have a warning
(node:72101) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 1)
explicitFailApiClient
✓ does not have a warning
3 passing (14ms)
Done.
承诺可以是未解决的,解决的,也可以是拒绝的。“then”用于处理决议,而“catch”用于处理拒绝。你是在拒绝别人而没有抓住它。
尝试
因此,在调用
null
在下面的代码中,JS已经执行了语句
const failApiClient = getFakeApi(Promise.reject(new Error()));
与。。。相比
const explicitFailApiClient = {
getObjects(): Promise<LocalObject[]> {
return Promise.reject(new Error());
}
};
当调用
这是我对这件事的另一种解决办法。我可以使用来自Sinon的
const getFakeApi = {getObjects: (result) => result};
const getFakeApiStub = sinon.stub(getFakeApi, 'getObjects');
describe('successApiClient', () => {
before(() => {
getFakeApiStub.resolves([fakeObject]); // success and resolves
});
it('does not have a warning', async () => {
// do nothing
});
});
describe('failApiClient', () => {
before(() => {
getFakeApiStub.rejects(new Error()); // make it failed
});
it('should not have a warning', async () => {
// do nothing
});
});
参考:https://sinonjs.org/releases/v6.3.5/stubs/tax stubresolvesvalue
希望有帮助
问题内容: 我想为特定模型中的Mongoose 方法创建一个存根,以便我创建的模型的任何实例都将调用该存根,而不是普通的Mongoose 方法。我的理解是,执行此操作的唯一方法是像这样对整个模型进行存根: 不幸的是,这行代码使我的测试抛出以下错误: 有人知道这里出了什么问题吗? 问题答案: 有两种方法可以完成此操作。首先是 如果您使用log mongoose.Model控制台,则会看到该模型可用的
我试图将所有用户从一个具有特定角色的VC中转移出来,例如:!召唤@role 这样,所有具有特定角色的用户都应该来到VC,用户在那里键入该命令 目前我的代码是这样的: 目前,我正在移动所有用户,但是我只希望用户具有知情的角色 我试着用: 但是没有成功。。。有人能帮我解决这个问题吗?
我已经开始使用WebClient(org.springframework.web.reactive.function.client.WebClient)调用rest服务。我有两门课,说实用。java和ServiceImpl。Java语言ServiceImpl。java是我使用WebClient的地方。我打的电话看起来像- (上面的ClientACK是org.springframework.web.
我希望在当前测试的文件中存根一个函数。此函数在进行如下分解时是必需的: 在测试时,永远不会调用存根,而是继续调用实际函数。但当我“正常”需要它时(即:不进行分解) 然后正确使用存根,一切正常 我感觉到这是因为析构是如何工作的,事实上存根是对象属性,而不是直接的函数。无论如何,如果你能给我提供一些见解,我将不胜感激!
问题内容: 我真的很head头。我使用s已有一段时间了,但现在,使用SimpleDateFormat解析日期(只是有时)是完全错误的。 特别: 打印字符串。有没有搞错?-它甚至都不会一直解析为错误的日期! 更新: 修复得很漂亮。您不知道吗,在其他一些地方也滥用了它。一定喜欢调试别人的代码:) 问题答案: 我认为您要使用格式,而不是’hh’,以便您使用00-23之间的小时数。“ hh”采用12小时增
我想知道我是否缺少关于sinon.js的任何信息,我尝试使用sinon.stub()。返回和收益率,但无法得到结果。任何指针都将有所帮助。 我有一个模块,它调用另一个从数据库返回值的模块 我使用mocha作为测试框架,也使用sinon。我面临的问题是,当我创建一个users.findOne存根以返回一个值时,控件不会到达我的else if(用户)条件。 我的单元测试案例如下