要求在 PhantomJs 测试中失败
Require fails on a PhantomJs test
我有一个简单的库,
-- src/lib.js --
function libtest() {
return 2;
}
我想测试的,我收集到的需要 PhantomJs。我有一个测试文件:
-- 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
我收到以下错误:
Running "mocha_phantomjs:all" (mocha_phantomjs) task TypeError:
'undefined' is not a function (evaluating
'fs.readFileSync('../src/lib.js', 'utf8')')
at file:///Users/ekkis/Development/tst/test/tests.js:5
at
file:///Users/ekkis/Development/tst/node_modules/mocha//mocha.js:529
at file:///Users/ekkis/Development/tst/test/browser/tests.js:10 in
s at file:///Users/ekkis/Development/tst/test/browser/tests.js:1 in
e at file:///Users/ekkis/Development/tst/test/browser/tests.js:1 at
file:///Users/ekkis/Development/tst/test/browser/tests.js:1090 Unsafe
JavaScript attempt to access frame with URL about:blank from frame
with URL
file:///Users/ekkis/Development/tst/node_modules/mocha-phantomjs-core/mocha-phantomjs-core.js.
Domains, protocols and ports must match.
这似乎是在抱怨 fs
未定义。但是,如果 require('assert')
起作用,我想 require('fs')
应该起作用。但我不太清楚这是 运行.
的上下文
我错过了什么?
好的。答案只是将库包含在 .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>
我有一个简单的库,
-- src/lib.js --
function libtest() {
return 2;
}
我想测试的,我收集到的需要 PhantomJs。我有一个测试文件:
-- 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
我收到以下错误:
Running "mocha_phantomjs:all" (mocha_phantomjs) task TypeError: 'undefined' is not a function (evaluating 'fs.readFileSync('../src/lib.js', 'utf8')')
at file:///Users/ekkis/Development/tst/test/tests.js:5
at file:///Users/ekkis/Development/tst/node_modules/mocha//mocha.js:529
at file:///Users/ekkis/Development/tst/test/browser/tests.js:10 in s at file:///Users/ekkis/Development/tst/test/browser/tests.js:1 in e at file:///Users/ekkis/Development/tst/test/browser/tests.js:1 at file:///Users/ekkis/Development/tst/test/browser/tests.js:1090 Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///Users/ekkis/Development/tst/node_modules/mocha-phantomjs-core/mocha-phantomjs-core.js. Domains, protocols and ports must match.
这似乎是在抱怨 fs
未定义。但是,如果 require('assert')
起作用,我想 require('fs')
应该起作用。但我不太清楚这是 运行.
我错过了什么?
好的。答案只是将库包含在 .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>