簡體   English   中英

將一個js文件包含在另一個文件中的正確方法是什么?

[英]What is the correct way to include one js file in another?

以下 JavaScript 代碼有效:

let Color = require('color');

class Example {
    its_not_easy_being_green() {
        return Color('green');
    }
}

test('It is not easy being green', () => {
    expect(new Example().its_not_easy_being_green()).toBeDefined();
})

和 npx npx jest給我一個綠條。

$ npx jest
 PASS  test/example.spec.js
  ✓ It is not easy being green (2 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.351 s, estimated 1 s
Ran all test suites.

但是,每當我嘗試將 class 與測試分開時,我都會遇到各種錯誤:

最常見的是不允許在模塊外使用 import。

或者該Example不是構造函數。

我想要做的是將所有不是三線測試的東西從我上面發布的 JavaScript 文件中移出

如果這是 Java,我會將這些內容移動到單獨的.java文件中,然后在我的測試中import該文件。

如果這是 C 將涉及 linker 和#include

我嘗試的是創建一個Example.js文件:

let Color = require('color');

class Example {
    its_not_easy_being_green() {
        return Color('green');
    }
}

然后在測試中require它:

let Example = require('Example.js')

test('It is not easy being green', () => {
    expect(new Example().its_not_easy_being_green()).toBeDefined();
})

但這讓我抱怨Example不是構造函數,我想這是真的。 它是一個 class,它可能具有某種相當惰性的默認構造函數。

我也嘗試用import替換require

import('Example.js')

test('It is not easy being green', () => {
    expect(new Example().its_not_easy_being_green()).toBeDefined();
})

但這會引起有關不允許在模塊外使用import的投訴。

是否可以將笑話測試與 JavaScript 中正在測試的代碼分開?

Javascript 中沒有#include - 它使用模塊系統代替您export要共享的內容。

最好學習該語言提供的工具,而不是試圖強迫它以不同語言的方式做某事。

另外,請注意 nodejs 中有兩種類型的模塊,使用require()module.exports的 CommonJS 模塊和使用importexport的 ESM 模塊。 您的項目似乎是為 CommonJS 設置的,因此除非您想將項目配置為 ESM 模塊項目,然后使用 ESM 規則進行導入和導出,否則您將使用它。

對於 CommonJS 項目:

const Color = require('color');

class Example {
    its_not_easy_being_green() {
        return Color('green');
    }
}

module.exports.Example = Example;

然后,在您的主文件中:

const { Example } = require('./Example.js')

test('It is not easy being green', () => {
    expect(new Example().its_not_easy_being_green()).toBeDefined();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM