Grunt Connect Prism Mock Server不记录请求

时间:2014-12-17 23:56:40

标签: angularjs gruntjs protractor angularjs-e2e ngmocke2e

我的目标是使用grunt-connect-prismas 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');

1 个答案:

答案 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
]);