使用' request-native-promise'没有正确地链接到它随后的'然后'并且'赶上'处理程序。
我的量角器测试
// There's a bunch of other imports here
import { browser } from "protractor";
const RequestPromise = require('request-promise-native');
describe('spec mapper app', () => {
let specMapperPage: SpecMapperPage;
let specMapperFVRPage: SpecMapperFieldsValuesReviewPage;
let loginLogoutWorkflow: LoginLogoutWorkflow;
let apiToken: LoginToken;
let tokenUtil: TokenUtil;
let projectRecordsToBeDeleted = [];
let requestHandler;
let logger = new CustomLogger("spec mapper app");
let speccyEndpoints = new SpeccyEndpoints();
beforeAll( () => {
logger.debug("Before All")
loginLogoutWorkflow = new LoginLogoutWorkflow();
loginLogoutWorkflow.login();
tokenUtil = new TokenUtil();
tokenUtil.getToken().then((token:LoginToken) => {
apiToken = token;
requestHandler = new SpeccyRequestHandler(apiToken);
});
});
describe('import/export page', () => {
it('TC2962: I'm a test case', () => {
let testLogger = new CustomLogger("TC2955");
// Test Var setup
... // removed for brevity
// Test Setup
browser.waitForAngularEnabled(false);
// Setup the record to be on the mapper page
let body = speccyEndpoints.generateRevitPostBody(PROJECT_ID, fileName);
requestHandler.postToSpeccy(speccyEndpoints.DELITE_REVIT_POST_URI, body).then((response) => { // EDIT: removed non-existant argument "rejection"
// --> The then handler the promise is STILL not resolving into
// Only made it here like once
console.log("Response is: ");
console.log(response);
// I got this to work once, but now it's not
console.log("Response body is: ");
console.log(response.body);
}).catch(error => {
// --> The catch handler is ALSO NOT resolving
console.log("catch handler executed!");
console.log(error);
});
});
});
});
出现问题的测试用例。我的console.log("Response is: ");
没有被输出。我没有收到有关原因的错误消息。
My Speccy Request Handler Wrapper Class
import * as RequestPromise from "request-promise-native";
import {LoginToken} from "../testObjects/LoginToken";
import {CustomLogger} from "../logging/CustomLogger";
export class SpeccyRequestHandler {
_baseAPIURL = 'http://myapi.net/';
_options = {
method: '',
uri: '',
auth: {
'bearer': ''
},
headers: {
'User-Agent': 'client'
},
"resolveWithFullResponse": true,
body: {},
json: true
};
_logger;
constructor(apiToken: LoginToken) {
this._options.auth.bearer = apiToken.idToken;
this._logger = new CustomLogger(SpeccyRequestHandler.name);
}
getOptions() {
return this._options;
}
postToSpeccy(uri:string, body?) {
this._options.method = 'POST';
this._options.uri = this._baseAPIURL + uri;
if(body) {
this._options.body = body;
}
return RequestPromise(this._options);
}
getFromSpeccy(uri) {
this._options.method = 'GET';
this._options.uri = this._baseAPIURL + uri;
return RequestPromise(this._options);
}
}
这是我的一个API专用的Request Handler,Speccy one,并且在URL和令牌传递中有一些自定义方面。
来源
Request-Promise-Native Github Page
Request-Promise Github page, documentation location
更新号码
修复@tomalak引起我的注意后,我{/ 1}}处理程序中的console.log正在执行,我转换后的前5个小时对此,我得到了响应对象的大约150多行控制台日志,其中包含我希望从我的请求URI中获得的响应。我甚至使用.then(...
将身体排除在外。我认为事情是固定的,我没有使用我的记录器登出文件,所以我丢失了我的证据。现在,当我运行此测试和此请求时,我根本不会进入response.body
处理程序。我也没有进入捕获。我的请求正在工作,因为我的资源是在命中后期端点时创建的。任何进一步的建议表示赞赏
什么会导致某些事情有时起作用而不是其他事情?我唯一想到的可能是我的请求处理程序中的通用.then(...
名称并没有被用来代替被捕获的构建链上方的另一个方法。
更新2号
删除了一堆东西来缩短我的问题。如果您需要更多说明,请询问,我会添加它。
答案 0 :(得分:0)
最终在API结束时超时。我的回答只是花了太长时间才回到我身边。它没有失败,所以它永远不会陷入困境。我让它在某一点上起作用,因为长时间的响应是由于我们系统中特定资源的过多。我以为是我和我写错了。长话短说,怀疑你的系统,即使你认为它是完美的,或者如果你的开发者上下发誓什么都不会被打破。
此外,请求调试模块是一件好事,必须证明其他端点(例如https://jsonplaceholder.typicode.com/上的其他测试端点)可以与您的代码一起使用。