gpt4 book ai didi

javascript - "Cannot find global value ' Promise '"摩卡测试出错

转载 作者:可可西里 更新时间:2023-11-01 10:02:34 83 4
gpt4 key购买 nike

以下内容与完整堆栈 Node.js 问题有关。它涉及 Express、Mongoose 和 Mocha。

我有一个 Controller 模块,它具有处理 HTTP 调用的功能。它基本上将 Request 和 Response 对象作为其参数。在其中,它将 Form 数据从 Request 对象中提取出来,并将数据存储在多个 MongoDB 实例中。为了完成多个数据存储,我们使用对 Promise.all 的调用。这是在异步函数中完成的。类似下面的内容

async function saveData(data1 : Data1Interface, data2 : Data2Interface,
res: Response)
{
try
{
//Call 3 save methods each returning promised. Wait fLoginInfoModelor them all to be resolved.
let [data1Handle, data2Handle] = await Promise.all([saveData1(data1),
saveData2(data2)]);
//if we get here all of the promises resolved.
//This data2Handle should be equal to the JSON {"id" : <UUID>}
res.json(data2Handle);
res.status(200);
}
catch(err)
{
console.log("Error saving registration data” + err);
res.json( {
"message" : "Error saving registration data " + err
});
res.status(500);
}
}

在 saveData1 和 saveData2 中,我正在做类似的事情:

function saveData1(data : DataInterface) : Promise<any>
{
let promise = new Promise(function(resolve : bluebird.resolve, reject : bluebird.reject)
{
Data1Model.create(data, function(err,
data){
….
.
.
这很好用!我们在 Typescript 中完成所有这些工作。

但是我想用 Mocha 测试这个方法。这就是问题的开始。为了简洁起见,我在这个例子中只使用了一个 Mongoose 模型。如果我尝试运行以下代码作为 mocha 单元测试,我会收到以下错误消息。就 Promise 构造函数而言,我不确定它想要什么?

TSError:⨯ 无法编译 TypeScript无法找到全局值“Promise”。 (2468)server/controllers/registration.server.controller.ts (128,17):ES5/ES3 中的异步函数或方法需要“Promise”构造函数。确保您有“Promise”构造函数的声明或在您的 --lib 选项中包含“ES2015”。 (2705)server/controllers/registration.server.controller.ts (134,66):'Promise' 仅指类型,但在这里用作值。 (2693)

请注意,第 128 行是开始“async function saveData(data1 : Data1Interface, data2 : Data2Interface, res: Response)”的行“

下面两行“让 [data1Handle, data2Handle] = await Promise.all([saveData1(data1), 保存数据 2(数据 2)]); “和

“让 promise = new Promise(function(resolve : bluebird.resolve, reject : bluebird.reject)”

产生“‘Promise’只引用了一个类型,但在这里被用作一个值。”错误。

Mocha 单元测试代码如下所示。

import 'mocha';
import { expect } from 'chai';
import * as sinon from 'sinon';
var config = require('../config/config');
import * as sinonmongoose from 'sinon-mongoose';
import * as controller from './registration.server.controller';
import { Request, Response } from 'express';
import { Data1Interface, Data1Model} from '../models/data1.server.model';
import * as mathUtilities from '../utilities/math.utilities';
import mongoose = require("mongoose");
import * as bluebird from 'mongoose';

(mongoose as any).Promise = bluebird.Promise;

//NOTE: This currently does not work.


describe('Registration related tests', function () {

beforeEach(()=>{

});
afterEach(()=>{
//sinon.restore(authentication);
});
it('should return 200 OK valid outline', function (done) {
let dummyRequest: any = {
body: {
username: "awhelan",
password: "awhelan",
firstName : "Andrew",
lastName: "Whelan",
email: "awhelan@srcinc.com",
source: "none",
school: "Arizona",
consent: true,
dob: "1970-03-10",
gender:"Male",
interviewconsent: true,
recordingconsent: true
}
};
let id = mathUtilities.createId("Andrew", "Whelan", "awhelan@srcinc.com");
let retJson = "{id:" + id +"}";
let dummyResponse: any = {
json: function (data) {
expect(data).to.equal(retJson);
done();
return this;
},
sendStatus: function (code) {
expect(code).to.equal(200);
done();
return this;
}
};
let req: Request = dummyRequest as Request;
let res: Response = dummyResponse as Response;


let mock = sinon.mock(Data1Model).expects('create').yields(null, { nModified: 1 });

controller.register(req, res);

sinon.restore(Data1Model.create);

});
});

请注意 ts An async function or method in ES5/ES3 requires the 'Promise' constructor 中的建议” 没有帮助。

任何关于我如何克服这些错误的建议都将不胜感激。

-安德鲁

最佳答案

通过安装 es6-shim typings 修复了它。

关于javascript - "Cannot find global value ' Promise '"摩卡测试出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43989061/

83 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com