microsoft / vscode-wordcount

Sample Word Count extension for VS Code.
Other
124 stars 80 forks source link

Mocha: Error: Cannot find module 'vscode' #5

Closed deerawan closed 8 years ago

deerawan commented 8 years ago

Hi,

I was trying to run the testing with command

mocha out/test

but got this error

Error: Cannot find module 'vscode'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:286:25)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/Users/deerawan/Work/Sites/opensource/vscode-wordcount/out/test/extension.test.js:10:14)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at /usr/local/lib/node_modules/mocha/lib/mocha.js:216:27
    at Array.forEach (native)
    at Mocha.loadFiles (/usr/local/lib/node_modules/mocha/lib/mocha.js:213:14)
    at Mocha.run (/usr/local/lib/node_modules/mocha/lib/mocha.js:453:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/mocha/bin/_mocha:393:18)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:475:10)
    at startup (node.js:118:18)
    at node.js:952:3
chrisdias commented 8 years ago

hi - did you run npm install?

deerawan commented 8 years ago

@chrisdias yes, I did. Did you get this error too?

chrisdias commented 8 years ago

@bpasero any ideas here? i can run tests under the debugger, but not from the command line.

bpasero commented 8 years ago

We do not support to run tests from the command line at the moment. The only exception is https://code.visualstudio.com/docs/extensions/testing-extensions#_running-tests-automatically-on-travis-ci-build-machines

cmstead commented 8 years ago

Tangentially related, I found this on a google search for the same issue.

My solution has been the following:

As I have been developing my extension, I abstract away all of the vscode module dependencies and wrap up my novel code in modules which don't rely on the vscode module. This makes my code testable in the large without adding a dependency on a third party module.

I don't know how complex any other extensions might end up being for people who find this, but I thought it might help kick off a new thought process for anyone who runs into a similar issue. Ultimately it's not useful to test whether the vscode module is working properly if you are developing an extension, so hopefully, your code is basically testable except where it touches the VS Code API.

bpasero commented 8 years ago

Totally right way of writing tests :+1:

prmichaelsen commented 1 month ago

Tangentially related, I found this on a google search for the same issue.

My solution has been the following:

As I have been developing my extension, I abstract away all of the vscode module dependencies and wrap up my novel code in modules which don't rely on the vscode module. This makes my code testable in the large without adding a dependency on a third party module.

I don't know how complex any other extensions might end up being for people who find this, but I thought it might help kick off a new thought process for anyone who runs into a similar issue. Ultimately it's not useful to test whether the vscode module is working properly if you are developing an extension, so hopefully, your code is basically testable except where it touches the VS Code API.

I'm so miffed. I thought my tests were failing because I was using jest as my test runner. I was initially going to use this approach by defining types myself but I decided I should just set everything up with mocha. I spent all this time figuring out mocha only to find out that even with mocha you can't actually run the tests from the command line. I--

cmstead commented 1 month ago

@prmichaelsen:

I definitely think you should consider breaking the dependency with a facade or something similar, defining a contract just for the facade, lift the interface definition out of the facade file, import it where you need the type, and do a cheap and dirty (or not so cheap and dirty) DI so you can text your module in isolation.

I run all of my extension tests from the command line. I simply fake the output from the vscode module and then test the behavior from there. This should all work from jest. Ultimately, the real vscode module requires a full running instance of vscode which can be massively frustrating.

Separately, if you want to test functionality in a live environment, you might be able to test electron applications with selenium. I haven't tried it myself, but I believe it is doable.