簡體   English   中英

如何使用 Mocha 運行單個測試?

[英]How to run a single test with Mocha?

我使用 Mocha 來測試我的 JavaScript 內容。 我的測試文件包含 5 個測試。 是否可以運行特定測試(或一組測試)而不是文件中的所有測試?

嘗試使用mocha 的--grep選項

    -g, --grep <pattern>            only run tests matching <pattern>

您可以使用任何有效的 JavaScript 正則表達式作為<pattern> 例如,如果我們有test/mytest.js

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});

然后:

$ mocha -g 'logs a'

運行單個測試。 請注意,這會遍歷所有describe(name, fn)it(name, fn)調用的it(name, fn)

考慮使用嵌套的describe()調用進行命名空間,以便輕松定位和選擇特定的集合。

根據您的使用模式,你可能只是想用。 我們使用 TDD 風格; 它看起來像這樣:

test.only('Date part of valid Partition Key', function (done) {
    //...
}

只有這個測試才會從所有文件/套件運行。

如果您使用npm test (使用 package.json 腳本),請使用額外的--將參數傳遞給 mocha

例如npm test -- --grep "my second test"

編輯:看起來--grep可能有點挑剔(可能取決於其他參數)。 你可以:

修改package.json:

"test:mocha": "mocha --grep \"<DealsList />\" .",

或者使用--bail似乎不那么挑剔

npm test -- --bail

只需在“描述”、“它”或“上下文”之前使用 .only。 我使用“$npm run test:unit”運行,它只執行帶有 .only 的單元。

describe.only('get success', function() {
 // ...
});

it.only('should return 1', function() {
  // ...
});

運行單個測試——按文件名——

實際上,如果您從 mocha 中刪除 glob 模式(例如./test/**/*.spec.js ),您還可以通過文件名(不僅僅是“it()-string-grepping”)運行單個 mocha 測試.opts,分別創建一個副本,不帶:

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js

這是我的 mocha.single.opts (只是缺少上述 glob 行不同)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive

背景:雖然您可以覆蓋 opts-File 中的各種開關(以--開頭),但您不能覆蓋 glob 該鏈接也有一些解釋。

提示:如果node_modules/.bin/mocha使您感到困惑,請使用本地包 mocha。 你也可以只寫mocha ,如果你全局安裝了它。


如果你想要package.json的舒適:仍然:從你的mocha.opts刪除**/* -ish glob,將它們插入這里,對於所有測試,將它們留在單個測試中:

"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha",
"test-single-watch": "mocha -R list -w",

用法:

> npm run test

分別

> npm run test-single -- test/ES6.self-test.spec.js 

注意--它將后面的任何文本鏈接到npm腳本

有多種方法可以做到這一點。

  • 如果您只想從整個測試用例列表中運行一個測試,那么您只能在測試用例之前編寫。

     it.only('<test scenario name>', function() { // ... });

    或者您也可以執行如下 mocha grep 命令

    mocha -g <test-scenario-name>
  • 如果您想運行一個 describe 部分中的所有測試用例,那么您也可以只編寫描述。

     describe.only('<Description of the tests under this section>', function() { // ... });
  • 如果您有多個測試文件並且只想運行其中一個,則可以按照以下命令進行操作。

     npm test <filepath>

    例如:

     npm test test/api/controllers/test.js

    這里的“test/api/controllers/test.js”是文件路徑。

你可以試試“it.only”

 it.only('Test one ', () => {

            expect(x).to.equal(y);
        });
it('Test two ', () => {

            expect(x).to.equal(y);
        });

在這第一個只會執行

嗨,上述解決方案對我不起作用。 運行單個測試的另一種方法是

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'

這有助於從單個文件和特定名稱運行測試用例。

查看https://mochajs.org/#usage我們看到只需使用

摩卡測試/我的文件

將工作。 您可以省略末尾的“.js”。

對於那些希望運行單個文件但他們無法使其工作的人,對我有用的是我需要將我的測試用例包裝在下面的描述套件中,然后使用描述標題,例如“我的測試描述”作為模式.

describe('My Test Description', () => {
  it('test case 1', () => {
    // My test code
  })
  it('test case 2', () => {
  // My test code
  })
})

然后運行

yarn test -g "My Test Description"

要么

npm run test -g "My Test Description"

不知道為什么 grep 方法在使用 npm test 時對我不起作用。 這雖然有效。 由於某種原因,我還需要指定測試文件夾。

npm test -- test/sometest.js

使用Mocha 的--fgrep (或只是 -f),您可以選擇包含字符串的測試,例如:

mocha -f 'my test x'

將在it()describe()context()塊中運行包含my test x所有測試。

將所有測試合並到一個 test.js 文件中,並將您的包 json 添加腳本為:

  "scripts": {
  "api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},

在您的測試目錄中鍵入命令:

npm run api:test

暫無
暫無

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

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