我对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
声明应该在顶层。
答案 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.
});