UNPKG

nest-commander-testing

Version:

A testing utility for nest-commander. It builds on top of ideas from @nestjs/testing and is not tied to any test framework directly.

40 lines (31 loc) 2.07 kB
# NestJS Commander Testing So you;'ve built a CLI application, but you want to test it, and you want to be able to do your usual NestJS DI mocking. Well, here's your solution :fireworks: ## Installation Before you get started, you'll need to install a few packages. First and foremost, this one: `nest-commander-testing` (name pending). You'll also need to install `@nestjs/testing` as this package makes use of them under the hood, but doesn't want to tie you down to a specific version, yay peerDependencies! ```sh npm i nest-commander-testing @nestjs/testing # OR yarn add nest-commander-testing @nestjs/testing # OR pnpm i nest-commander-testing @nestjs/testing ``` ## Testing With Mocks So what's the use of writing a super awesome command line script if you can't test it super easily, right? Fortunately, `nest-commander` has some utilities you can make use of that fits in perfectly with the NestJS ecosystem, it'll feel right at home to any Nestlings out there. Instead of using the `CommandFactory` for building the command in test mode, you can use `CommandTestFactory` and pass in your metadata, very similarly to how `Test.createTestingModule` from `@nestjs/testing` works. In fact, it uses this package under the hood. You're also still able to chain on the `overrideProvider` methods before calling `compile()` so you can swap out DI pieces right in the test. [A nice example of this can be seen in the basic.command.factory.spec.ts file](./../../integration/basic/test/basic.command.factory.spec.ts). ## Testing Inquirer Questions If you are making use of the `InquirerService`, you can use `CommandTestFactory.setAnswers` method and pass either a single answer or multiple answers depending on how many answers you need to mock. In doing so, a mock inquirer service will act similarly to inquirer without needing to modify `process.stdin` or make use of any user input, allowing smooth testing in your CI pipelines. For an example of this, please check the [pizza command integration test](../../integration/pizza/test/pizza.command.spec.ts).