Google app engine 使用Mocha对OAuth JS进行单元测试

Google app engine 使用Mocha对OAuth JS进行单元测试,google-app-engine,node.js,mocha.js,Google App Engine,Node.js,Mocha.js,我正在做一个基于JS的项目,该项目运行在GAE上,部分代码使用来自Facebook、Twitter或谷歌的OAuth获取用户的头像。我试图用摩卡编写测试来测试这个,但是我遇到了一些问题 当我在前端对其进行测试时,代码可以正常工作,我设想的工作方式是使用ZombieJS在GAE的dev_appserver.py上运行应用程序,启动OAuth函数,填写适当的auth内容,然后通过返回图像URL完成测试 然而,我遇到的第一个障碍是NodeJS的服务器似乎不允许GAE的服务器在相同的IP地址上运行。例如

我正在做一个基于JS的项目,该项目运行在GAE上,部分代码使用来自Facebook、Twitter或谷歌的OAuth获取用户的头像。我试图用摩卡编写测试来测试这个,但是我遇到了一些问题

当我在前端对其进行测试时,代码可以正常工作,我设想的工作方式是使用ZombieJS在GAE的
dev_appserver.py
上运行应用程序,启动OAuth函数,填写适当的auth内容,然后通过返回图像URL完成测试

然而,我遇到的第一个障碍是NodeJS的服务器似乎不允许GAE的服务器在相同的IP地址上运行。例如:

exec 'dev_appserver.py .', ->
    console.log arguments
这将返回错误“地址已在使用”。除了在不同的机器上运行之外,我如何解决这个问题?有没有可能告诉NodeJS不要保留整个IP,只保留一个端口?我在
8080
上运行GAE,当NodeJS没有调用它时,它可以正常工作

第二个问题是僵尸。我正试图找出一种方法,当新窗口打开时,我可以收听,基本上,是浏览器控制台的尾部。我已经就谷歌集团展开了两次讨论,但还没有人回应(https://groups.google.com/forum/?hl=en#!topic/zombie js/cJklyMbwxRE和)

虽然后者没有我所能找到的解决方法那么重要(我希望如此),但前者是主要问题,因此我非常感谢关于如何解决这一冲突的任何方向

以下是我的NodeJS脚本:

exec = ( require 'child_process' ).exec
fs = require 'fs'
should = require 'should'
yaml = require 'yaml'
Zombie = require 'zombie'

common  = require '../../static/assets/js/common'

url = 'ahmeds.local'

browser = new Zombie()
config = null
consoleCb = 'function consoleSuccess(){console.log("success",arguments)}function consoleFailure(){console.log("failure",arguments)}'

browser.debug = true
browser.silent = false

fs.readFile '../../config.yaml', (error, data) ->
    config = yaml.eval data.toString 'ascii'

    exec 'cd ../../ && dev_appserver.py -a ' + url + ' .', ->
        console.log arguments

        # browser.visit config.local.url, ->
        browser.visit 'http://' + url + ':8080', ->
            browser.evaluate consoleCb

            browser.evaluate 'profileImage("facebook",consoleSuccess,consoleFailure)'

            console.log browser.window.console.output

我对NodeJS的熟悉程度有限,但我刚刚测试了在同一台机器上运行NodeJS服务器和appengine本地dev服务器,效果很好。在没有看到NodeJS代码的情况下,我猜您也在尝试在端口8080上运行NodeJS,因此appengine服务器在启动时会抱怨(8080是默认值,您注意到它是您正在使用的端口)


尝试将
--port=8081
(或其他端口)传递到dev_appserver.py的调用中,它应该可以解决冲突。

我对NodeJS的熟悉程度有限,但我刚刚测试了在同一台机器上运行NodeJS服务器和App Engine本地开发服务器-效果很好。在没有看到NodeJS代码的情况下,我猜您也在尝试在端口8080上运行NodeJS,因此appengine服务器在启动时会抱怨(8080是默认值,您注意到它是您正在使用的端口)


尝试将
--port=8081
(或其他某个端口)传递给您对dev_appserver.py的调用,它应该可以解决冲突。

您显示的代码中没有任何内容(除了调用
dev_appserver
)应该侦听任何端口(除非zombie实现了“服务器”用于远程调试或类似的操作)。看起来端口冲突来自其他地方

请注意,zombie自己的Mocha测试框架确实设置了一个express服务器,所以如果您正在使用它或从中提取的代码,那么可能就是这样做的


netstat对谁绑定到哪个端口有何评论?

您显示的代码中没有任何内容(除了调用
dev_appserver
)应该在任何端口上侦听(除非zombie实现了用于远程调试的“服务器”或类似的东西)。看起来端口冲突来自其他地方

请注意,zombie自己的Mocha测试框架确实设置了一个express服务器,所以如果您正在使用它或从中提取的代码,那么可能就是这样做的


netstat对谁绑定到哪个端口有何评论?

我尝试过更改端口,问题似乎是地址问题。是的,更改端口仍然表示地址正在使用。我尝试过更改端口,问题似乎是地址问题。是的,更改端口仍然表示该地址正在使用。我无法以足够快的速度运行netstat以确定正在执行的操作。具有讽刺意味的是,NodeJS运行良好,appengine也运行良好,只有当我试图通过NodeJS调用appengine时,我才会得到这个地址错误。再一次,我看不出这是一个端口问题。如果你注释掉你的僵尸实例和任何调用它的方法,会发生什么?同样的事情,仍然抱怨地址:
[Errno 48]地址已经在使用中
Put
process.stdin.resume()在脚本末尾(这将阻止它退出,直到你控制c退出),然后运行netstat。这只是意味着,一旦代码完成,您仍然会有一个打开的输入流,因此节点不会退出,所以无论它设置了什么,都应该显示在netstat中。我无法足够快地运行netstat来确定正在做什么。具有讽刺意味的是,NodeJS运行良好,appengine也运行良好,只有当我试图通过NodeJS调用appengine时,我才会得到这个地址错误。再一次,我看不出这是一个端口问题。如果你注释掉你的僵尸实例和任何调用它的方法,会发生什么?同样的事情,仍然抱怨地址:
[Errno 48]地址已经在使用中
Put
process.stdin.resume()在脚本末尾(这将阻止它退出,直到你控制c退出),然后运行netstat。这只是意味着,一旦代码完成,您仍然会有一个打开的输入流,因此节点不会退出,因此无论它设置了什么,都应该显示在netstat.node中,而不会保留整个地址。我一直在同时运行node server和一些IIS部署的服务和网站,但它从未抱怨过。但是,我已经手动设置了节点的端口,因此我确信它不会与其他部署冲突。请注意,默认情况下,节点检查器在端口8080上运行,如果您有一个脚本同时运行节点服务器和节点检查器,则端口8080将被占用。节点不会保留整个地址。我一直在运行节点服务器和一些IIS d