[英]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 模塊和使用import
和export
的 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.