0

私は単純なライブラリを持っています、

-- src/lib.js --
function libtest() {
    return 2;
}

私が収集したテストしたいものには、PhantomJが必要です。テストファイルがあります:

-- test/lib.test.js --
var fs = require('fs');
var assert = require('assert');
describe('Test module', function() {
    var s = fs.readFileSync('../src/lib.js', 'utf8');
    eval(s);
    it('Shows name', function() {
        assert.equal(libtest(), 2);
    });
});

私はブラウザの準備をします:

# browserify lib.test.js -o tests.js

そして、私のメインページに含めます:

-- test/index.html --
<html>
<head>
  <meta charset="utf-8">
  <title>Mocha Tests</title>
  <link href="../../node_modules/mocha/mocha.css" rel="stylesheet" />
</head>
<body>
  <div id="mocha"></div>
  <script src="../../node_modules/mocha//mocha.js"></script>
  <script>mocha.setup('bdd')</script>
  <script src="tests.js"></script>
  <script>
    if (window.mochaPhantomJS) mochaPhantomJS.run();
    else mocha.run();
  </script>
</body>
</html>

ただし、テストを実行すると:

# grunt test

次のエラーが表示されます。

「mocha_phantomjs:all」(mocha_phantomjs) タスク TypeError の実行: 「未定義」は関数ではありません (「fs.readFileSync('../src/lib.js', 'utf8')' を評価しています)」

file:///Users/ekkis/D​​evelopment/tst/test/tests.js:5
で file:///Users/ekkis/D​​evelopment/tst/node_modules/mocha//mocha.js:529
で file:// /Users/ekkis/D​​evelopment/tst/test/browser/tests.js:10 in s at file:///Users/ekkis/D​​evelopment/tst/test/browser/tests.js:1 in e at file://安全でない JavaScript が URL のフレームにアクセスしようとしています: URL file:///Users/ekkis/D​​evelopment/tst/node_modules/mocha-phantomjs-core/mocha-phantomjs-core.js のフレームから空白。ドメイン、プロトコル、およびポートが一致する必要があります。

fs未定義であることについて不平を言っているようです。ただし、機能する場合は、require('assert')機能するはずだと思いrequire('fs')ます。しかし、これが実行されるコンテキストはよくわかりません。

私は何が欠けていますか?

4

1 に答える 1

0

わかった。答えは、単にライブラリを に含めること.htmlです。テストはブラウザ内で実行されるため、ライブラリが利用可能になります。このような:

<body>
  <div id="mocha"></div>
  <script src="../../node_modules/mocha//mocha.js"></script>
  <script>mocha.setup('bdd')</script>
  <script src="../../src/lib.js"></script>
  <script src="tests.js"></script>
于 2015-11-18T03:39:06.210 に答える