2

CoffeeScriptでノードとExpress3を学習しようとしています。テストにMochaを使用していて、ポート番号を参照しようとしています。

describe "authentication", ->
  describe "GET /login", ->
    body = null
    before (done) ->
      options =
        uri: "http://localhost:#{app.get('port')}/login"
      request options, (err, response, _body) ->
        body = _body
        done()
    it "has title", ->
      assert.hasTag body, '//head/title', 'Demo app - Login'

app.jsファイルでも使用されているため、これを使用しています。

require('coffee-script');

var express = require('express')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.set('view options',{layout:false});
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
  app.locals.pretty = true;
});

app.configure('test', function(){
  app.set('port', 3001);
});

require('./apps/authentication/routes')(app)

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

ただし、このテストを実行すると、次のエラーが発生します。

TypeError: Object #<Object> has no method 'get'

誰かがそれがテストで機能しない理由と私が代わりに何ができるかを説明できますか?

4

1 に答える 1

1

app.jsそのモジュール内にと呼ばれるファイルと変数があるために混乱していますが、実際には変数をモジュールエクスポートとしてapp公開するように設定していません。appあなたはこれを行うことができます:

var app = exports.app = express();

そして、テストで使用できますrequire('../app').app.get('port')(テストがサブディレクトリにあると仮定します。必要に応じて相対パスを調整します)。少し混乱しないように名前を変更することapp.jsをお勧めします。server.js

config.jsただし、このタイプの構成データを保持する専用モジュールをお勧めします。

于 2012-11-25T07:18:53.807 に答える