2012-07-17 84 views
1

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

当我在前端测试它时,代码起作用,我设想它的工作方式是使用ZombieJS在GAE的dev_appserver.py上运行应用程序,触发OAuth函数,填充相应的auth内容,然后通过返回图片网址来完成测试。

但是,我得到的第一个障碍是它出现 NodeJS的服务器不允许GAE的服务器运行在相同的IP地址上。例如:

exec 'dev_appserver.py .', -> 
    console.log arguments 

这将返回错误“地址已在使用中”。除了在另一台机器上运行它,我怎样才能解决这个问题?是否有可能告诉NodeJS不保留整个IP和端口?我在8080上运行GAE,当它没有被NodeJS调用时它工作正常。

第二个问题是ZombieJS。我试图找出一种方法,我可以到新窗口打开,实质上,tail浏览器的控制台。我已经开始对Google小组进行两次讨论,但没有人回复(https://groups.google.com/forum/?hl=en#!topic/zombie-js/cJklyMbwxRE和https://groups.google.com/forum/?hl=en#!topic/zombie-js/tOhk_lZv5eA

While后者不是重要,因为我可以找到解决方法(我希望),前者是主要问题,所以我非常感谢任何方向如何解决此地址冲突。

这里是我的脚本的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 
+0

节点不保留整个地址。我一直在同时运行节点服务器以及一些IIS部署的服务和网站,并且它从不抱怨。但是,我已经手动设置了节点的端口,所以我确信它不会与其他部署冲突。请注意,默认情况下节点检查器在端口8080上运行,如果您有一个同时运行节点服务器和节点检查器的脚本,则会占用端口8080。 – Zee 2013-07-27 01:00:44

回答

1

我只有用有限的NodeJS熟悉,但我只是测试运行在同一台机器上的服务器的NodeJS和App Engine的本地开发服务器 - 它工作得很好。没有看到你的NodeJS代码,我猜你也试图在端口8080上运行NodeJS,所以App Engine服务器在启动时发出抱怨(8080是默认值,并且你注意到它是你使用的端口)。

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

+0

我试过改变端口,问题似乎是一个地址问题。 – 2012-07-19 18:46:40

+0

您可以分享您在调用NodeJS时使用的代码吗? – 2012-07-19 18:53:00

+0

当你改变端口时,你得到的错误是相同的? – 2012-07-22 21:05:37

0

你所显示的代码(除了调用dev_appserver以外)甚至都不应该在任何端口上侦听(除非僵尸为远程调试或类似的东西实现“服务器”)。看起来港口冲突来自其他地方。

请注意,僵尸自己的Mocha测试框架确实会设置一个快速服务器,所以如果您使用它或从中解除代码,那可能就是这样。

什么是netstat不得不说关于谁绑定到什么端口?

+0

我不能足够快地运行netstat来确定什么在做什么。讽刺的是,NodeJS运行良好,应用程序引擎也运行良好,只有当我尝试通过NodeJS调用应用程序引擎时,我是否会收到此地址错误。再次,我没有看到它是如何成为一个港口问题。 – 2012-07-20 07:45:26

+0

如果你注释掉你的僵尸实例和任何调用它的方法,会发生什么? – ebohlman 2012-07-20 09:44:12

+0

同样的事情,仍然抱怨地址:'[Errno 48]已经在使用的地址' – 2012-07-20 11:53:31