JavaScript和摩卡+柴。为什么我的测试总是通过?

时间:2017-09-27 19:48:42

标签: javascript mocha chai

我的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;。

enter image description here

我甚至可以评论expect字符串,它也会过去oO

enter image description here

2 个答案:

答案 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) => {