ES6 / Mocha包含文件

时间:2016-11-08 07:16:53

标签: javascript ecmascript-6 mocha chai

我对ES6导出/导入语法很陌生,我想知道如何在我的indexTest.js文件中动态导入包含测试的文件。

我有两个测试文件。

PeopleTest.js

/* global it, describe, before, after */
/* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */

import chai, { expect } from 'chai';
import dirtyChai from 'dirty-chai';

chai.use(dirtyChai);

describe('People tests', () => {
  it('Mock', () => {
    expect(true).to.be.true();
  });
});

PostTest.js

/* global it, describe, before, after */
/* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */

import chai, { expect } from 'chai';
import dirtyChai from 'dirty-chai';

chai.use(dirtyChai);

describe('Post tests', () => {
  it('Mock', () => {
    expect(true).to.be.true();
  });
});

我想有一个全局文件来导入这两个文件

indexTest.js

/* global it, describe, before, after */
/* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */

import chai, { expect } from 'chai';
import dirtyChai from 'dirty-chai';

chai.use(dirtyChai);

describe('All tests', () => {
  before(() => {
    // some stuff
  });

  after(() => {
    // some stuff
  });

  import './PeopleTest';
  import './PostTest';
});

但当然它不起作用,因为import声明应该在顶层。

2 个答案:

答案 0 :(得分:1)

您可以执行CodingIntrigue suggested in a comment并致电<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="default" namespace="/action" extends="struts-default"> <interceptors> <interceptor name="authenticationInterceptor" class="AuthenticationInterceptor"> <interceptor-stack name="secureStack"> <interceptor-ref name="authenticationInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptor> </interceptors> <action name="login"> <result>login.jsp</result> </action> <action name="LoginAction" class="LoginAction"> <result name="success" type="redirectAction"> <param name="actionName">task</param> <param name="namespace">/action</param> </result> <result name="input">login.jsp</result> </action> </package> </struts> 而不是使用require。然而,这需要对运行时环境做出假设,这可能并不总是成立。例如,如果您将ES6代码编译为使用AMD语义加载模块的环境,那么import中的require将被解释为好像它位于您{{1}的顶部}语句,你不会得到你想要的结果。

获得你想要的东西,除了ES6模块加载语义之外别无其他任何东西,只是修改你导入的两个模块,以便它们导出一个创建他们想要运行的测试的函数,以及然后在你需要的地方调用该函数。这样,您将模块加载与测试创建分离。

要导入的模块之一可能是:

describe

您的主要测试文件可能会变成:

import

答案 1 :(得分:-1)

您只能在HTML页面中包含脚本文件,而不能在其他脚本文件中包含脚本文件。也就是说,您可以编写JavaScript来加载您的&#34;包含&#34;脚本进入同一页面:

var imported = document.createElement('script');
imported.src = '/path/to/imported/script';
document.head.appendChild(imported);

您的代码很可能取决于您的&#34;包含&#34;然而,在这种情况下,它可能会失败,因为浏览器将加载&#34;导入的&#34;脚本是异步的。你最好的选择就是简单地使用像jQuery或YUI这样的第三方库,它可以解决这个问题。

// jQuery
$.getScript('/path/to/imported/script.js', function()
{
    // script is now loaded and executed.
    // put your dependent JS here.
});

src:from this question