1

私は GAE を実行する JS ベースのプロジェクトに取り組んでおり、コードの一部は Facebook、Twitter、または Google から OAuth を使用してユーザーのアバターを取得します。これをテストするために Mocha でテストを作成しようとしていますが、いくつかの問題が発生しています。

フロントエンドでテストするとコードは機能します。私が想定した動作方法は、ZombieJS を使用して GAE でアプリを実行しdev_appserver.py、OAuth 関数を起動し、適切な認証情報を入力してから、返してテストを完了することです。画像の URL。

ただし、最初のハードルは、NodeJS のサーバーが GAE のサーバーを同じ IP アドレスで実行することを許可していないように見えることです。例えば:

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

これにより、「アドレスは既に使用されています」というエラーが返されます。別のマシンで実行する以外に、どうすればこれを回避できますか? IP全体とポートだけを予約しないようにNodeJSに指示することは可能ですか? GAE を実行して8080いますが、NodeJS によって呼び出されない場合は正常に動作します。

2 つ目の問題は ZombieJS です。新しいウィンドウが開いたとき、そして基本的にはブラウザのコンソールを聞く方法を見つけようとしています。tailGoogle グループで 2 つのディスカッションを開始しましたが、まだ誰も応答していません (https://groups.google.com/forum/?hl=en#!topic/zombie-js/cJklyMbwxRE およびhttps://groups.google .com/forum/?hl=ja#!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=8081dev_appserver.py の呼び出しに (または他のポート) を渡してみてください。競合が解決するはずです。

于 2012-07-19T18:21:01.550 に答える
0

あなたが示したコードの中には、(の呼び出しをdev_appserver除いて)どのポートでもリッスンする必要はありません(ゾンビがリモートデバッグ用の「サーバー」などを実装していない限り)。ポートの競合が別の場所から発生しているようです。

ゾンビ独自の Mocha テスト フレームワークは高速サーバーをセットアップすることに注意してください。そのため、それを使用している場合、またはそこから持ち上げたコードを使用している場合は、それが実行されている可能性があります。

誰がどのポートにバインドしているかについて、netstat は何を伝えなければなりませんか?

于 2012-07-20T01:00:33.477 に答える