Abr*_*m P 11 rest mocking angularjs gruntjs yeoman
我正在使用Yeoman,Grunt和Bower构建一个独立于后端构建前端的平台.我的想法是,我的所有(AngularJS)控制器,服务,工厂等都存在于这个项目中,然后根据grunt构建的结果注入我的服务器端代码库.
我的问题是:
我如何模拟端点,以便Grunt服务器响应与我的(Rails)应用程序相同的端点?
目前我正在使用:
angular.module('myApp', ['ngResource'])
.run(['$rootScope', function ($rootScope) {
$rootScope.testState = 'test';
}]);
Run Code Online (Sandbox Code Playgroud)
然后在我的每个服务中:
mockJSON = {'foo': 'myMockJSON'}
Run Code Online (Sandbox Code Playgroud)
并在每个方法:
if($rootScope.testState == 'test'){
return mockJSON;
}
else {
real service logic with $q/$http goes here
}
Run Code Online (Sandbox Code Playgroud)
之后grunt build,testState = 'test'被删除.
这显然是一个相对笨拙的架构.我怎么能避免呢?我如何让Grunt响应与我的应用程序相同的端点(其中一些有动态参数)应用一些逻辑(如果需要),并提供一个json文件(可能依赖于路径参数)?
Abr*_*m P 14
我已经通过使用express来编写一个用静态json响应的服务器来解决这个问题.
首先,我在我的项目中创建了一个名为'api'的目录.在该目录中,我有以下文件:
package.json:
{
"name": "mockAPI",
"version": "0.0.0",
"dependencies": {
"express": "~3.3.4"
}
}
Run Code Online (Sandbox Code Playgroud)
然后我npm install在这个目录中运行.
index.js:
module.exports = require('./lib/server');
Run Code Online (Sandbox Code Playgroud)
lib/server.js:
express = require('express');
var app = express();
app.get('/my/endpoint', function(req, res){
res.json({'foo': 'myMockJSON'});
});
module.exports = app
Run Code Online (Sandbox Code Playgroud)
最后在我的全球Gruntfile.js:
connect: {
options: {
port: 9000,
hostname: 'localhost',
},
livereload: {
options: {
middleware: function (connect, options) {
return [
lrSnippet,
mountFolder(connect, '.tmp'),
mountFolder(connect, yeomanConfig.app),
require('./api')
];
}
}
},
Run Code Online (Sandbox Code Playgroud)
然后服务发出请求,快速服务器提供正确的JSON.
之后grunt build,快速服务器只需替换为rails服务器.
从grunt-contrib-connectv.0.7.0开始,您还可以将自定义中间件添加到现有中间件堆栈,而无需手动重建现有的中间件堆栈.
livereload: {
options: {
open: true,
base: [
'.tmp',
'<%= config.app %>'
],
middleware: function(connect, options, middlewares) {
// inject a custom middleware into the array of default middlewares
middlewares.push(function(req, res, next) {
if (req.url !== '/my/endpoint') {
return next();
}
res.writeHead(200, {'Content-Type': 'application/json' });
res.end("{'foo': 'myMockJSON'}");
});
return middlewares;
}
}
},
Run Code Online (Sandbox Code Playgroud)
有关官方文档,请参阅https://github.com/gruntjs/grunt-contrib-connect#middleware.
| 归档时间: |
|
| 查看次数: |
5673 次 |
| 最近记录: |