使用grunt

时间:2015-10-16 08:19:59

标签: gruntjs phantomjs mocha end-to-end nightwatch.js

我是E2E测试和Grunt的新手。我正在使用Nightwatch.js,PahantomJS和Mocha进行端到端测试。

没有咕噜声,测试通过了,但是随着咕噜声,我得到了“客户”的错误。

没有咕噜声:

  1. 启动Selenium服务器

    $ selenium-server -p 4444 -role hub

  2. 将Ghost驱动程序注册到Selenium Hub

    $ node_modules/phantomjs/bin/phantomjs --webdriver=8080 --webdriver-selenium-grid-hub=http://127.0.0.1:4444

  3. 执行守夜人

    $ node_modules/nightwatch/bin/nightwatch -c bin/nightwatch.json -t tests/test.js

  4. 然后通过测试。

    使用grunt:

    我在客户端收到此错误TypeError: undefined is not a function

    console.log(client);的结果是

    function (err){
        if (err instanceof Error || toString.call(err) === "[object Error]") return done(err);
        if (null != err) {
          if (Object.prototype.toString.call(err) === '[object Object]') {
            return done(new Error('done() invoked with non-Error: ' + JSON.stringify(err)));
          } else {
            return done(new Error('done() invoked with non-Error: ' + err));
          }
        }
        done();
      }
    

    我的代码就像以下脚本一样。

    • test.js

      describe("sample test", function() {
      
          it("should say no item", function(client) {
      
              console.log("client:", client);
      
              client
                  .url("http://sample.com/")
                  .waitForElementVisible("body", 10000)
                  .click("a.link1")
                  .waitForElementVisible(".article", 10000)
                  .expect.element("div.cart").text.to.contain("no item");
          }); 
      });
      
    • Gruntfile.js

      module.exports = function(grunt) {
      
          var nightwatch = require('nightwatch');
      
          nightwatch.initGrunt(grunt);
      
          grunt.initConfig({
      
              nightwatch: {
                  options: {
                    cwd: "./"
                  },
                  "default" : {},
                  browserstack: {
                      argv: {
                          env: "browserstack"
                      },
                      settings: {
                          silent: true
                      }
                  },
                  "all" : {
                      argv: {
                          env: "default, browserstack"
                      }
                  }
              },
      
              mochacli: {
                  options: {
                      colors: true,
                      "check-leaks": false,
                      ui: "bdd",
                      reporter: "spec",
                      timeout: 20000
                  },
                  e2e: ["tests/*.js"]
              }
      
          });
      
          require("load-grunt-tasks")(grunt);
      
          grunt.registerTask("nightwatch", [
              "selenium_phantom_hub",
              "mochacli:e2e",
              "selenium_stop"
          ]);
      
          grunt.registerTask("default", ["nightwatch"]);
      
      };
      
    • 的package.json

      {
          "name": "Nightwatch-sample",
          "description": "test using Nightwatch.js",
          "version": "1.1.0",
          "dependencies": {
              "phantomjs": "^1.9.8",
              "nightwatch": "^0.8.4",
              "chai-nightwatch": "~0.1.x",
              "mocha-nightwatch": "2.2.6"
          },
          "devDependencies": {
              "chai": "^3.2.0",
              "chai-nightwatch": "^0.1.1",
              "grunt": "~0.4.4",
              "grunt-mocha-cli": "^1.14.0",
              "grunt-selenium-webdriver": "^0.2.451",
              "load-grunt-tasks": "^3.3.0"
          }
      }
      
    • nightwatch.json

      {
          "src_folders" : ["tests"],
          "output_folder" : "reports",
          "custom_commands_path" : "",
          "custom_assertions_path" : "",
          "page_objects_path" : "",
          "globals_path" : "",
      
          "selenium" : {
              "start_process" : false,
              "server_path" : "",
              "log_path" : "",
              "host" : "127.0.0.1",
              "port" : 4444,
              "cli_args" : {
                "webdriver.chrome.driver" : "",
                "webdriver.ie.driver" : ""
              }
          },
      
          "test_settings" : {
              "default" : {
                  "launch_url" : "http://localhost",
                  "selenium_port"  : 4444,
                  "selenium_host"  : "localhost",
                  "silent": true,
                  "firefox_profile": false,
                  "chrome_driver" : "",
                  "screenshots" : {
                      "enabled" : true,
                      "path" : "tests/screenshots",
                      "on_failure": true
                  },
                  "test_runner": "mocha",
                  "desiredCapabilities": {
                      "browserName": "phantomjs",
                      "javascriptEnabled": true,
                      "acceptSslCerts": true,
                      "phantomjs.page.settings.userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4"
                  }
              }
          }
      }
      

1 个答案:

答案 0 :(得分:0)

@Filype在评论中已经提到为什么你的代码没有按你的意愿工作。

详细说明:您使用的地方'客户'因为函数参数被mocha用来传递“完成”。您可以用来向mocha发出信号的函数,您的测试是在异步情况下完成的 - 这就是为什么console.log(客户端)正在打印它的原因。你可能最终得到了这个代码,因为nightwatch有一个像这样为客户提供的结构。

为了让它运行起来,你应该重命名参数' client'完成',并在测试完成后调用done()。你也应该以某种方式自己实例化客户端。

然而:我确实认为夜视仪和摩卡不是很合适,因为它们提供的功能类似,不能很好地融合。也许你应该只是从grunt运行nightwatch而不试图添加摩卡咖啡? Google表示可以这样做:-) https://github.com/gextech/grunt-nightwatch

如果你真的想要的话,Mocha足够灵活,可以做很多事情,但是我说在摩卡里面运行另一个类似于系统的测试跑步者正在伸展它。

更新:显然,Nightwatch最近添加了一些Mocha支持https://github.com/nightwatchjs/nightwatch/issues/501我不知道在什么级别。如果你还没有使用mocha,我仍然认为你最好独立运行它。