我该如何解决 "ReferenceError: expect is not defined" 错误信息?

81

我想用mocha测试Javascript。我有这段代码:

describe('Array', function() {
    describe('indexOf()', function() {
        it("dovrebbe tornare -1 quando l'elemento non è presente", function() {
            expect([1,2,3].indexOf(4)).to.equal(-1)
        })
    })
})

还需要一个test/array.js文件。 Mocha已经安装完成

$ npm install -g mocha

当我运行时

$ mocha

我收到了这个错误:

$ mocha
․ 

0 passing (5ms)
1 failing

1) Array indexOf() dovrebbe tornare -1 quando l'elemento non è presente:
 ReferenceError: expect is not defined
  at Context.<anonymous> (/Users/simonegentili/Desktop/Javascipt Best Practice/test/array.js:4:4)
  at Test.Runnable.run (/usr/local/lib/node_modules/mocha/lib/runnable.js:211:32)
  at Runner.runTest (/usr/local/lib/node_modules/mocha/lib/runner.js:358:10)
  at /usr/local/lib/node_modules/mocha/lib/runner.js:404:12
  at next (/usr/local/lib/node_modules/mocha/lib/runner.js:284:14)
  at /usr/local/lib/node_modules/mocha/lib/runner.js:293:7
  at next (/usr/local/lib/node_modules/mocha/lib/runner.js:237:23)
  at Object._onImmediate (/usr/local/lib/node_modules/mocha/lib/runner.js:261:5)
  at processImmediate [as _immediateCallback] (timers.js:317:15)
11个回答

105

Mocha是一个测试框架;正如https://mochajs.org/#assertions所述,您需要提供自己的断言库。因此,expect确实未定义,因为您从未定义它。

(我推荐chai

npm install chai

那么

(请注意阿米特·楚克鲁尼的评论,指出实际上需要chai)

那么

var expect = chai.expect;

20
你应该使用 var expect = require('chai').expect - Amit Choukroun
1
请在其上方添加const chai = require('chai') - chovy
4
如果你希望在浏览器页面上运行mocha测试,可以使用以下代码: var expect = (typeof require === 'undefined') ? chai.expect : require('chai').expect;。请注意,这不是一个解释,而是对原文进行的简洁翻译。 - Michiel Roos
或者 let { expect } = require('chai') - Gershom Maes

12

尝试一下:

首先,在终端中执行以下命令:

npm install expect.js

然后在你的代码中使用:

var expect = require('expect');

10

按照其他帖子的建议,安装了Chai之后,使用ES6语法时应将导入放在顶部。

import {expect} from 'chai';

4
在我的情况下,我正在使用JEST测试用例。并将所有的test.js文件放置在next文件结构中的pages/文件夹中。
解决我的问题是通过将所有的test.js文件从next文件结构中的pages文件夹移动到位于根目录外的__test__文件夹内或根目录下。

3
let chai = require('chai');

var assert = chai.assert;

describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function() {
      assert.equal(-1, [1, 2, 3].indexOf(4));
    });
  });
});

3
为了在使用 chai 时全局暴露 expect,需要通过首选测试库的配置加载以下内容:
require('chai/register-assert');  // Using Assert style
require('chai/register-expect');  // Using Expect style
require('chai/register-should');  // Using Should style

例如:
使用以下命令: npx mocha --config .mocharc.js *.spec.js

2
从CLI中只需使用mocha --require chai/register-expect - Brett Zamir

1
在我的使用场景中,我通过 karma 运行了一个 mocha spec。解决方案是安装适用于我的测试框架库的 karma 集成。
npm install karma-mocha --save-dev
npm install karma-sinon-chai --save-dev

我需要将框架添加到我的karma.conf.js文件中:

module.exports = function(config) {
    config.set({
        browsers: ['Chrome'],
        frameworks: ['mocha', 'sinon-chai'],
        files: [
            '.tmp/**/*.spec.js'
        ],
        client: {
            chai: {
                includeStack: true
            },
            mocha: {
                reporter: 'html',
                ui: 'bdd'
            }
        }
    })
}

希望这能帮助其他人。

0
如果你正在使用Mocha进行TDD,请安装Expect.js或Chai.js。
因此,请执行npm install expectnpm install chai

0
创建一个名为chaiexpections.js的文件,并将expect声明为全局变量。
'use strict';

// Configure chai
global.expect = require('chai').expect;

现在将其传递到配置文件中的cucumberopts,require下面。
cucumberOpts: {
    require: ['./testsuites/*.js','./chaiexpections.js','./commons/hooks.js']
    //tags: [],
    strict: true,    
    format: [],  
    'dry-run': false,           
    compiler: [],
    format: 'json:results.json',   
  },

这样做可以避免在每个步骤定义中声明chai异常所带来的开销。


0

要么在HTML文件中添加此脚本标签

<script src="https://unpkg.com/expect@%3C21/umd/expect.min.js"></script>

或安装软件包

npm install chai or expect

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接