我的目标是使用grunt-connect-prism(as described here)来捕获来自我的AngularJS应用程序的服务器请求,然后将其用作量角器E2E测试的模拟数据。
或者,我正在为Grunt寻找更好的服务器模拟数据库的建议。
这个项目还处于起步阶段,但我认为我还是会发布我的问题:我无法保存模拟数据。当我启动我的grunt服务器时,我可以看到棱镜运行,但它仍然无法保存。我从作者帖子的评论中读到,人们试图运行'环境'变量作为我的服务器api运行的根目录。所以我只尝试从/ campaigns端点录制,但没有运气。
$ grunt服务器
运行"服务器"任务
...
跑步"棱镜"任务Prism为:/ campaigns / to localhost:8888
创建...
帮助!?!?
// Gruntfile.js
grunt.initConfig({
connect: {
server: {
options: {
keepalive: true,
hostname: '*',
port: 8888,
base: '.tmp',
middleware: function(connect, options) {
return [
require('grunt-connect-prism/middleware'), // will
modRewrite(['!\\.?(js|css|html|eot|svg|ttf|woff|otf|css|png|jpg|gif|ico) / [L]']),
mountFolder(connect, '.tmp'),
];
}
}
}
},
prism: {
options: {
mode: 'record',
mocksPath: './mocks',
// server
host: 'localhost',
port: 8888,
https: false,
// client
context: '/campaigns/',
}
},
// more stuff I removed
});
// development
grunt.registerTask('server', function() {
grunt.task.run([
'stuff ...'
'prism',
'stuff ...',
]);
});
// more stuff I removed
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-connect-prism');
答案 0 :(得分:1)
解决了我的问题:首先,我需要将我的Vagrant文件中的另一个端口列入白名单......
其次,我需要启动另一个grunt连接服务器作为我的服务器端调用的代理,与我在另一个端口上运行的客户端分开。
第三,我需要将Access-Control标头添加到服务器端代理
// Adding the middleware
connect: {
// clientside server
server: {
options: {
keepalive: true,
hostname: '*',
port: 8888,
base: 'public/',
middleware: function(connect, options) {
return [
// ... dish static files
]
}
}
},
// serverside proxy
proxy: {
options: {
hostname: '*',
port: 9000,
middleware: function(connect, options, middlewares) {
middlewares.unshift(require('grunt-connect-prism/middleware'));
// add REST stuff
middlewares.unshift(function (req, res, next) {
console.log('proxy', req.url);
res.setHeader('Access-Control-Allow-Credentials', 'true');
res.setHeader('Access-Control-Allow-Headers', 'accept, x-version, content-type, authorization');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8888');
res.setHeader('Access-Control-Expose-Headers', 'X-Version, X-Maintenance-Mode');
res.setHeader('Access-Control-Max-Age', '1728000');
next();
});
return middlewares;
}
}
}
},
// Adding prism configuration.
prism: {
options: {
mode: 'record',
mocksPath: 'mocks',
host: 'localhost',
port: 3000,
https: false,
context: '/',
}
},
// Running prism
grunt.registerTask('server', [
// ...
'connect:proxy', // proxy server that will log calls to mock
'prism:proxy', // initiates prism library
'connect:server' // client connect server to dish out client files
]);