0
を実行する方法を見つけようとしていますmochaをHTML DOM
以上に実行しています。この場合、グローバルdocument
を使用してDOM
のうちtable
を検索しています。npm test(CLI)を使用してHTML DOMを使用する方法
document
が
undefined
であると私は、何とか、1を自分で作成する必要があること、しかし、私は私の主な問題があると考えていることを理解し
ReferenceError: document is not defined
at /home/luiz/Projects/linguist-unknown/src/scripts/ling-loader.js:92:61
at extFunc (/home/luiz/Projects/linguist-unknown/src/scripts/ling-loader.js:49:11)
at Array.every (native)
at Utilities.tryMatchUrlExtension (/home/luiz/Projects/linguist-unknown/src/scripts/ling-loader.js:60:25)
at Utilities.<anonymous> (/home/luiz/Projects/linguist-unknown/src/scripts/ling-loader.js:90:16)
at xhr.onload (/home/luiz/Projects/linguist-unknown/src/scripts/ling-loader.js:24:11)
at dispatchEvent (/home/luiz/Projects/linguist-unknown/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:591:25)
at setState (/home/luiz/Projects/linguist-unknown/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:614:14)
at IncomingMessage.<anonymous> (/home/luiz/Projects/linguist-unknown/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:447:13)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickCallback (internal/process/next_tick.js:104:9)
1) should refresh table
16 passing (3s)
1 failing
1) Loader Utilities should refresh table:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
:私はnpm test
を実行したときしかし、私はエラーのような何かを得ます
- 初めて
npm
とmocha
を使用しており、そのドキュメントに関連するものが見つかりませんでした。私は、CLIを使用しています//あなたは私がと同様の問題を解決していることがわかります下に主に、webbrowsers に関連している人々はについてきたすべての問題は、それは私のコードではGitHubの - にトラヴィスでテストされます
XMLHttpRequest
。しかし、私は、document
変数を私のテストに適切に含めるための最良の方法を理解できません。テストutilities.js
... global.XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; global.jsyaml = require('../src/scripts-min/js-yaml.min.js'); global.LinguistHighlighter = require('../src/scripts/ling-highlighter.js').LinguistHighlighter; var LinguistLoader = require('../src/scripts/ling-loader.js').LinguistLoader; describe('Loader', function() { var utilities = new LinguistLoader.Utilities(); it('should refresh table', function(done) { var location = { hostname: "github.com", href: "https://github.com/github-aux/linguist-unknown/blob/chrome/examples/Brain/human_jump.brain", pathname: "/github-aux/linguist-unknown/blob/chrome/examples/Brain/human_jump.brain" }; // check if it is not breaking utilities.refresh(location, function(langObj, table){ done(); }); }); }); ...
:したがって
は、次のように私はそれが、この答えはstackoverflowの
私のコードの上に既に存在するものを求めている容赦しますutilities.js:
...
Utilities.prototype.refresh = function(location, callback) {
var new_url = location.href;
if (new_url === current_url || !this.isGithub(location)) {
return;
}
current_url = new_url;
if (linguistObj === null) {
linguistObj = {
path: this.getPossibleFilepath(location)
};
}
setTimeout(function() {
var downloadHelper = new DownloadHelper();
downloadHelper.load(linguistObj.path, function(objs){
this.tryMatchUrlExtension(current_url, objs, function(langObj){
var table = document.getElementsByClassName("blob-wrapper")[0]
.getElementsByTagName("table")[0];
new LinguistHighlighter.Highlighter(langObj).draw(table);
// callback for tests purposes only
if (callback) {
callback(langObj, table);
}
});
}.bind(this));
}.bind(this), 100);
};
...
何か助けていただければ幸いです。ありがとうございました!
CLIにDOMがないため、ブラウザでDOMテストを実行する必要があります。あなたはmochaでセレニウム(http://www.seleniumhq.org/)を使ってテストを行うことができます。ソースラボやブラウザスタックのような商用ツールもあります。詳細については、https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testingおよびセレンのドキュメントを参照してください。 –
こんにちは@YiKai、あなたの答えをありがとう、セレニウムは本当にそれを助ける素晴らしいツールですが、私は[jsdom](https://www.npmjs.com/package/jsdom)でCLIを使って100%解決策を見つけました)! –
ええ、それはより簡単な解決策であるようです。 –