【问题标题】:How can I solve "ReferenceError: expect is not defined" error message?如何解决“ReferenceError:未定义预期”错误消息?
【发布时间】:2013-10-12 01:14:26
【问题描述】:

我正在尝试用 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 文件。摩卡安装了

$ 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)

【问题讨论】:

    标签: javascript node.js mocha.js


    【解决方案1】:

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

    (我推荐chai

    npm install chai
    

    然后

    (请参阅 Amit Choukroune 的评论指出实际上需要 chai)

    然后

    var expect = chai.expect;
    

    【讨论】:

    • 你应该使用var expect = require('chai').expect,
    • 或上面的const chai = require('chai')
    • 或者var expect = (typeof require === 'undefined') ? chai.expect : require('chai').expect;,如果你想在浏览器的页面上运行摩卡测试。
    • let { expect } = require('chai')
    【解决方案2】:

    试试

    首先,在终端中

    npm install expect.js

    在你的代码中:

    var expect = require('expect');
    

    【讨论】:

      【解决方案3】:

      按照其他帖子的建议安装 Chai 后,使用 es6 语法,您应该将导入放在顶部

      import {expect} from 'chai';
      

      【讨论】:

        【解决方案4】:
        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));
            });
          });
        });
        

        【讨论】:

          【解决方案5】:

          在我的用例中,我通过 karma 运行 mocha 规范。解决方案是为我的测试框架库安装业力集成:

          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'
                      }
                  }
              })
          }
          

          希望这对其他人有所帮助。

          【讨论】:

            【解决方案6】:

            为了在全局范围内公开expect,在使用chai时,应通过配置为您喜欢的测试库加载以下内容:

            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

            【讨论】:

            • 在 CLI 中使用 mocha --require chai/register-expect
            【解决方案7】:

            如果您将 Mocha 用于 TDD,请安装 Expect.js 或 Chai.js

            所以,请npm install expectnpm install chai

            【讨论】:

              【解决方案8】:

              在html文件中添加这个脚本标签

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

              或安装包

              npm install chai or expect
              

              【讨论】:

                【解决方案9】:

                创建文件 chaiexpections.js 并将期望声明为全局

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

                现在在 cucumberopts 下的配置文件中传递它,需要

                cucumberOpts: {
                    require: ['./testsuites/*.js','./chaiexpections.js','./commons/hooks.js']
                    //tags: [],
                    strict: true,    
                    format: [],  
                    'dry-run': false,           
                    compiler: [],
                    format: 'json:results.json',   
                  },
                

                这避免了必须在每个步骤定义中声明 chai 异常的开销

                【讨论】:

                  【解决方案10】:

                  就我而言,我使用的是 JEST Test Cases。我把所有 test.js 文件放在里面 pages/ 下一个文件结构的文件夹。

                  因此,通过将 next file structurepages 文件夹中的所有 test.js 文件移动到 @ 内部来解决我的问题987654327@ 文件夹外或 root of the folder

                  【讨论】:

                    猜你喜欢
                    • 2020-10-22
                    • 2016-12-07
                    • 2018-11-24
                    • 2022-01-05
                    • 1970-01-01
                    • 2020-02-22
                    • 1970-01-01
                    • 2021-06-03
                    相关资源
                    最近更新 更多