1

我的目标是使用grunt-connect-prism如此处所述)来捕获来自我的 AngularJS 应用程序的服务器请求,然后用作量角器 E2E 测试的模拟数据。

或者,我正在为 Grunt 寻找更好的服务器模拟数据库的建议。

这个项目仍处于起步阶段,但我想我还是会发布我的问题:我无法保存模拟数据。当我启动我的 grunt 服务器时,我可以看到 prism 正在运行,但它仍然没有保存。我从作者帖子中的评论中读到,人们试图将“上下文”变量作为我的服务器 api 运行的根目录运行。所以我尝试只从 /campaigns 端点录制,但没有运气。

$ 咕噜服务器

运行“服务器”任务

...

运行“棱镜”任务棱镜创建:/campaigns/ 到 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');
4

1 回答 1

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
]);
于 2014-12-19T17:57:19.583 回答