JavaScript+ Mocha + Chai 。为什么我的测试总是通过?

标签 javascript mocha.js chai

我有 index.html 文件,h1 中包含“Hello world!”文本:

<!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\""

它总是报告“通过”。

enter image description here

我什至可以评论 expect 字符串,它也通过了 oO

enter image description here

最佳答案

您需要将done 声明为it 的参数。

it('Does x', (done) => {
  someAsyncFunc((err, result) => {
    done()
  })
})

通过声明第一个参数,您实质上告诉 mocha 等待直到 done 被调用,否则它只是将其视为同步测试

因此,它不会等待您的expect 调用运行,并且会过早地认为测试成功。

来自 Mocha's docs :

Simply invoke the callback when your test is complete. By adding a callback (usually named done) to it(), Mocha will know that it should wait for this function to be called to complete the test.

关于JavaScript+ Mocha + Chai 。为什么我的测试总是通过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46456118/

相关文章:

javascript - 有没有一种方法可以同时添加 onkeypress 和 onclick 事件监听器?

javascript - 为什么这个测试失败了?数组应等于 []

javascript - Facebook API : AppID|AppSecret token?

javascript - 如何使图像出现在 Javascript 中

javascript - 如何制作 svg 元素(例如矩形)scrollIntoView?

javascript - 使用 should.js 和 Mocha 检查 throw new 错误

mocha.js - 如何订阅 mocha 套件事件?

node.js - 在 mocha 中运行 supertest 时如何获取实际的服务器错误?

javascript - 在 module.exports 方法上使用 sinon 测试方法调用

javascript - 我期待一个函数返回一个字符串,但似乎返回未定义。它没有通过 Mocha 测试