我的index.html文件包含' Hello world!' h1中的文字:
<!DOCTYPE HTML>
<html>
<head>
<title></title>
<meta charset="UTF-8">
</head>
<body>
<h1>Hello world!</h1>
<script src="bundle.js"></script>
</body>
</html>
这是我的index.test.js:
import {expect} from 'chai';
import jsdom from 'jsdom';
import fs from 'fs';
describe('index.html', () => {
it("should say 'Hello world!'", () => {
// read file content to variable
const index = fs.readFileSync('./src/index.html', "utf-8");
// pass this variable to jsdom:
jsdom.env(index, function(err, window) {
const h1 = window.document.getElementByTagName('h1')[0]; // read our h1
expect(h1.innerHTML).to.equal("Helloooooooo World!"); //<---- passed
done();
window.close();
});
})
})
我保存所有并按照这样运行:
"test": "mocha --reporter progress buildScripts/testSetup.js \"src/**/*.test.js\""
它总是报告&#34;通过&#34;。
我甚至可以评论expect
字符串,它也会过去oO
答案 0 :(得分:4)
您需要将done
声明为it
的参数。
it('Does x', (done) => {
someAsyncFunc((err, result) => {
done()
})
})
通过声明第一个参数,你基本上告诉mocha等到调用done
,否则它只是认为它是同步测试
因此,它不会等待您的expect
来电运行,并会过早地将测试视为成功。
来自Mocha's docs:
完成测试后,只需调用回调即可。通过向它()添加回调(通常名为done),Mocha将知道它应该等待调用此函数来完成测试。
答案 1 :(得分:0)
应该是:
it("should say 'Hello world!'", (done) => {