将数据传递给以编程方式运行的Mocha测试的最佳方法是什么?

时间:2018-03-28 21:43:12

标签: node.js express testing mocha

尝试解决我似乎无法将动态收集的数据传递给Mocha测试的问题。

以下是我的申请的逻辑:

  1. 客户提交他们的Github网址。请求Express / Node应用程序。

  2. Express / Node应用程序获取repo和username并向Github API请求数据,并将文件内容作为base64添加到对象。

  3. 将包含文件的对象传递给相关的测试文件,然后执行。

  4. 处理结果并创建初步成绩。然后将这些发送回客户端。

  5. 以下是测试文件的外观:

        const chai = require('chai');
        const chaiSubset = require('chai-subset');
        chai.use(chaiSubset);
        const expect = chai.expect;
        const base64 = require('base-64');
        const HTML_CONTENT = require('../../00-sandbox-files/basic-portfolio-solution.json').html;
        const CSS_CONTENT = require('../../00-sandbox-files/basic-portfolio-solution.json').css;
        const decodedCSS = base64.decode(CSS_CONTENT[1].content);
        const cheerio = require('cheerio');
        const juice = require('juice');
    
        let decodedHTMLcontact;
        let decodedHTMLindex;
        let decodedHTMLportfolio;
    
        for (const obj in HTML_CONTENT) {
          if (HTML_CONTENT[obj].path == "contact.html") {
            decodedHTMLcontact = base64.decode(HTML_CONTENT[obj].content);
          } else if (HTML_CONTENT[obj].path == "index.html") {
            decodedHTMLindex = base64.decode(HTML_CONTENT[obj].content);
          } else if (HTML_CONTENT[obj].path == "portfolio.html") {
            decodedHTMLportfolio = base64.decode(HTML_CONTENT[obj].content);
          }
        }
    
        tests = function (html, css) {
          describe('HTML Elements tests that should pass for contact.html', function () {
            let $ = cheerio.load(decodedHTMLcontact);
            describe('HTML Elements that should exist in contact.html', function () {
              it('should contain a header element', function () {
                expect($('body').find('header').length).to.equal(1);
              });
              it('should contain a section element', function () {
                expect($('body').find('section').length).to.equal(1);
              });
              it('should contain several anchor elements', function () {
                expect($('nav').find('a').length).to.be.at.least(3, 'You need an additional anchor elements for your navigation elements');
              });
              it('should contain an h1 element', function () {
                expect($('body').find('h1').length).to.equal(1);
              });
              it('should contain a form element', function () {
                expect($('body').find('form').length).to.equal(1);
              });
              it('should contain a footer element', function () {
                expect($('body').find('footer').length).to.equal(1);
              });
            });
    

    这是Mocha测试的执行文件:

    const Mocha = require('mocha');
    
    // Instantiate a Mocha instance.
    const mocha = new Mocha();
    const HW_PORTFOLIO_PATH = './server/05-run-testing-suite/HW-Week1-portfolio-wireframe/HW-1-portfolio.js';
    
    function homeworkRouter(contentObj, repo) {
      switch (repo) {
        case "Basic-Portfolio":
          mocha.addFile(HW_PORTFOLIO_PATH);
          break;
        case "HW-Wireframe":
          mocha.addFile('./server/05-run-testing-suite/HW-Week1-portfolio-wireframe/HW-1-wireframe.js');
          break;
        default:
          console.log("No homework provided");
          break;
      }
    }
    
    module.exports = {
    
      // Run the tests and have info about what can be returned
      runTests: function(contentObj, repo) {
        homeworkRouter(contentObj, repo);
        console.log("Content Object", contentObj);
        console.log("Repo", repo);
        mocha.run()
        .on('fail', function (test, err) {
          console.log('Test fail');
          console.log(err);
        })
        .on('end', function () {
          console.log('All done');
        });
      }
    }
    

    我们提出的解决方案涉及使用vm(),将数据设置为全局变量,和/或构建和删除文件。我想要一个解决方案,它更高效,不会污染全球。

0 个答案:

没有答案