除了使用stubbing外,您可以尝试创建一个本地或“mock”服务器来响应请求。这样可以避免 stub out http.request 的情况发生。本地服务器的一个好处是,无论您是使用 http.request、XMLHttpRequest 还是类似的方法来获取在线资源,这种方法都应该有效。
Mock 服务器
您可以尝试 mock 服务器。使用它,您可以创建一个虚拟服务器来满足您的请求。
安装
npm install mockserver-grunt --save-dev
npm install mockserver-client --save-dev
Jasmine 代码
在你的规范(或测试)中,你可以使用以下代码(根据需要进行更改):
var mockServer = require("mockserver-grunt");
var mockServerClient = require("mockserver-client").mockServerClient;
beforeAll(function(done) {
mockServer.start_mockserver({
serverPort: 1080,
verbose: true
});
let response = {name:'value'};
let statusCode = 203;
mockServerClient("localhost", 1080).mockSimpleResponse('/samplePath', response, statusCode);
setTimeout(function() {
done();
}, 4000);
});
it("should be able to GET an online resource", function(done) {
}
这将在1080端口启动服务器。任何请求发送到http://localhost:1080/samplePath都将收到提供的响应。
同样地,服务器可以在测试结束时关闭:
afterAll(function() {
mockServer.stop_mockserver({
serverPort: 1080,
verbose: true
});
});
其他注意事项
修复损坏的jar文件
当服务器首次启动时,它会尝试下载所需的jar文件。这是一次性下载(据我所知)。如果它没有提供足够的时间,它将无法完全下载,您将得到一个无效或损坏的jar文件。要纠正这个问题,您可以自己下载jar文件。链接在运行中提供。对我来说,它位于https://oss.sonatype.org/content/repositories/releases/org/mock-server/mockserver-netty/3.10.6/mockserver-netty-3.10.6-jar-with-dependencies.jar。很可能,您想导航到最新版本。
更新
Express JS 服务器
自从我最初发布以来,我发现了Express JS。 Express启动服务器实例比Mock Server快得多。您也不必担心jar文件。
安装
npm install express --save-dev
Jasmine Code
var express = require('express');
var app = express();
var port = 3000;
var server;
beforeAll(function() {
server = app.listen(port, function() {
console.log("Listening on port " + port);
});
app.get('/samplePath', function (req, res) {
res.send("my response");
});
});
afterAll(function() {
server.close();
});
it("should be able to GET an online resource", function(done) {
}
如果你想更加高端,可以返回你使用的路径。例如,如果你访问
http://localhost:3000/helloworld,返回值将会是 helloworld。你可以根据需要进行适当的调整。
app.get('/*', function (req, res) {
res.send(req.params[0]);
});
如果您需要将代码强制进入错误路径,则可以使用
res.status(404) // HTTP status 404: NotFound
.send('Not found');
来源:如何使用Express/Node编程发送404响应?
如何配置Express JS的HTTPS
可以使用openssl为Express JS配置HTTPS。通过以下命令创建自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
来源:如何使用openssl创建自签名证书?
更新Express JS代码,使用以下方法使用HTTPS。
const secureOptions = {
key: fs.readFileSync("./spec/ExpressServer/key.pem"),
cert: fs.readFileSync("./spec/ExpressServer/cert.pem")
};
var secureServer = https.createServer(secureOptions, app);
注意:您可能需要配置应用程序的安全性以允许自签名证书用于HTTPS。