- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
以下内容与完整堆栈 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){
….
.
.
但是我想用 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/
我是 Mocha 新手,并尝试测试我的类(class)。我读过几篇文章,包括这两篇: JavaScript test (mocha) with 'import' js file Requiring e
rspec-mocks 有 expect(some_object).to receive(:some_method).and_call_original .我可以用 Mocha 做到这一点吗,如果可以
Rspec-mocks 具有expect(some_object).to receive(:some_method).and_call_original。我可以用 Mocha 做这个吗?如果可以,怎么
假设这个 ruby 代码: class User def self.failed_login!(email) user = User.find_by_email(email)
我有一个需要模拟或 stub 数据的情况。 var array =['add','divide'] var add =listMehtod[0]; if(add instanc
我收到错误: TypeError: 无法读取未定义的属性“$scope” 在 $controller (bower_components/angular/angular.js:10327:28) 在
我有一个 Rails Controller Action 要测试。在那个 Action 中,一个方法User.can?使用不同的参数多次调用。在其中一个测试用例中,我想确保 User.can?('wi
我正在致力于使用摩卡、 enzyme 创建 react 组件的单元测试。下面是一个示例组件。 Foo.js class Foo extends React.Component { custom
我是一名优秀的程序员,十分优秀!