1

我正在开发一个基于 JS 的项目,该项目在 GAE 上运行,部分代码使用 Facebook、Twitter 或 Google 的 OAuth 获取用户的头像。我正在尝试在 Mocha 中编写测试以对此进行测试,但我遇到了一些问题。

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

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

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

这将返回错误“地址已在使用中”。除了在不同的机器上运行它之外,我怎样才能解决这个问题?是否可以告诉 NodeJS 不保留整个 IP 而只保留一个端口?我正在运行 GAE,8080当它不被 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 )

虽然后者并不像我能找到解决它的方法那么重要(我希望),但前者是主要问题,所以我非常感谢任何关于如何解决这个地址冲突的方向。

这是我的 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
4

2 回答 2

1

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

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

于 2012-07-19T18:21:01.550 回答
0

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

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

关于谁绑定到哪个端口,netstat 有什么要说的?

于 2012-07-20T01:00:33.477 回答