ReferenceError:之前未定义(mocha / protractor)

时间:2015-07-08 07:17:16

标签: reactjs protractor mocha e2e-testing

我在String a, String b, Map<K,V> vals申请中使用protractor mocha。在尝试使用reactbefore()函数时,它会给我一个错误:

after()

然而,使用ReferenceError: before is not defined beforeEach()可以正常使用。

以下是我配置afterEach()

的方式
protractor.conf.js

PS。完整错误:

exports.config = {
  capabilities: {
    browserName: 'chrome'
  },
  frameworks: ['mocha', 'chai'],
  onPrepare: function() {
    browser.ignoreSynchronization = true;
  }
};

4 个答案:

答案 0 :(得分:5)

我能够通过将framework: jasmine2添加到protractor.conf.js来代替before()after()来管理beforeAll()afterAll()。 现在它充当魅力。

有关该问题的详细信息,请参阅gitHub comment @juliemr

编辑:错字

答案 1 :(得分:0)

对于那些想继续使用Mocha的人来说,从

更改量角器配置
frameworks: ['mocha', 'chai'],

framework: 'mocha',

它帮我修复了错误“ReferenceError:before not defined”

答案 2 :(得分:0)

这个问题可能已经死了,虽然我会在这里为那些想知道的人提供更多信息。接受的答案似乎对原始问题感到困惑,所以我们应该继续前进,让我们回到正轨。

接受的答案有什么问题?

正如@Tomas Dermisek所说,它应该只是使用mocha作为框架。似乎@Max决定使用茉莉而不是mocha,这实际上是摩卡的替代测试规范。这似乎是为什么@Max需要使用jasmines beforeAll()afterAll()而不是mocha所需的before()after()

jasmine2添加到framework的{​​{1}}

,可以获得使用茉莉花的进一步证据

在我们继续之前,茉莉和摩卡之间有一些注意事项

因为读过这篇文章的人可能已经尝试过茉莉花方法,因为它更容易&#34;然后你可能会使用开箱即用的茉莉花protractor.conf.js。如果您现在正在考虑实际使用摩卡,那么值得了解一些引起我注意的细微差别。

  1. 似乎像expect这样的量角器交互会返回一个承诺。 @cnishina今天向我指出,量角器用角度/ jasminewd包裹茉莉花,这就是为什么茉莉花开箱即用的原因。这意味着在茉莉花中element(by.css('app-root h1')).getText()将完美地运作。如果您尝试在摩卡中执行等效操作,那么expect(element(by.css('app-root h1')).getText()).toEqual('Car search POC');之类的内容会失败,而其他许多内容很难让您了解错误
  2. 你需要chai和chai-as-promise的一点帮助
    • chai将为您提供您想要的TypeError和其他语法糖果
    • chai-as-promise通过expect来丰富你的糖果,这样你就不需要在整个测试中做出.eventually承诺解决方案
    • 在写这篇文章的时候,最新的chai-as-promised依赖并没有与chai合作。不管怎么说都没有答应(抱歉,我无法抗拒)。这些是量角器项目使用的版本,我在工作then()
    • 中看到了量角器版本
  3. package.json片段

    package.json

    以下配置应该让您离开

    protractor.conf.js

    "devDependencies": {
      ...
      "chai": "~3.5.0",
      "chai-as-promised": "~5.3.0",
      "protractor": "~5.1.0",
      ...
    }
    

    tsconfig.e2e.json

    // Protractor configuration file, see link for more information
    // https://github.com/angular/protractor/blob/master/lib/config.ts
    
    exports.config = {
      allScriptsTimeout: 11000, // Timeout of each script
      specs: [
        './e2e/**/*.e2e-spec.ts'  // pattern for your tests
      ],
      baseUrl: 'http://localhost:4200/', // URL of your SUT
      capabilities: { 
        'browserName': 'chrome' // name of the browser you want to test in
      },
      directConnect: true, // No need to run selenium server for chrome and firefox
      framework: 'mocha', // The framework we want to use instead of say jasmine
      mochaOpts: { // Some reasonable mocha config
        reporter: "spec",
        slow: 3000,
        ui: 'bdd',
        timeout: 30000
      },
      beforeLaunch: function() { // If you're using type script then you need compiler options
        require('ts-node').register({
          project: 'tsconfig.e2e.json'
        });
      },
      onPrepare: function() { // making chai available globally. in your test use `const expect = global['chai'].expect;`
        var chai = require('chai');
        var chaiAsPromised = require("chai-as-promised");
        chai.use(chaiAsPromised);
        global.chai = chai;
      }
    };
    

    现在我们已经完成了管道工程并解释了让我们达到目的并回答OP并展示了之前的工作

    示例规范文件可能看起来像下面的规范,并将提供此输出

    {
      "compilerOptions": {
        "sourceMap": true,
        "declaration": false,
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "lib": [
          "es2016"
        ],
        "outDir": "../dist/out-tsc-e2e",
        "module": "commonjs",
        "target": "es6",
        "types":[
          "mocha",
          "chai",
          "node"
        ]
      }
    }
    

    还值得注意规范中使用的 search page I do something in a before! √ will display its title

    E2E / sample.e2e-spec.js

    const expect = global['chai'].expect;

答案 3 :(得分:0)

对于其他遇到相同错误的人,请检查您的ui配置。如果不支持将其设置为tdd before-您的测试将抛出一个异常,提示before未定义。相反,您需要使用suiteSetup。