2

mocha テストにファイルが存在するかどうかを確認しようとしています。ファイルがテストフォルダーに存在するという事実を知っています(これを機能させようとしている間、簡単にするためにそこに配置しています)。しかし、私が何をしても、 fs.existsSync は常に失敗します。Logger.startup() はファイルを作成します。Logger.getFilename() は、5-17-30-2013.log のような値を返します。私はモカに慣れていないので、古典的な失敗をしているのかどうかわかりません. 私の知る限り、モカを同期的に使用しています。助けてくれてありがとう。

ここに私のモカテストスクリプトがあります:

var logger = require('../logger');
var fs = require('fs');

describe("Logger", function () {
    it("Creates a file", function () {
        logger.startup();
        console.log(logger.getFilename());
        if (!fs.existsSync(logger.getFilename())) {
            throw ("Logging File Does Not Exist");
        }
    })
})
4

6 に答える 6

4

現在受け入れられている自己回答の説明は不十分です。それは言います:

どうやら fs はプロジェクトのルートである package.json フォルダーを調べており、それを呼び出しているファイルには関連していませんが、これは私にはわかりませんでした。

fs確かに、それは偶然でもモジュールの癖でもありません。fsモジュールは、process.cwd()渡された相対パスを解釈するために使用します。で変更しない限りprocess.chdir()process.cwd()現在のプロセスが開始されたディレクトリです。mochaは通常、プロジェクトのルートから起動されるため、プロセスmochaprocess.cwd()は、通常、プロジェクトのルートになります。mocha別のディレクトリから起動された場合はprocess.cwd()、別の値になります。

混乱は、モジュール システムが相対パスを処理する方法に起因する可能性があります。__dirname相対パスを持つモジュール名は、現在のファイルの相対パスとして解釈されます。これは とは異なる値である可能性がありますprocess.cwd()

于 2016-11-10T17:29:31.113 に答える
0

__dirnameを探していると思います。ファイル名の先頭に追加してみてください。

ドキュメント: http://nodejs.org/api/globals.html#globals_dirname

于 2013-08-31T10:27:31.247 に答える
-1

使用できますfs.open(filepath, 'r', callback);

http://nodejs.org/api/fs.html#fs_fs_open_path_flags_mode_callback

于 2015-03-03T12:34:26.510 に答える