Greg Smith
Greg Smith

Reputation: 2469

Javascript test structuring in .NET / Visual Studio

I have a .NET MVC solution, it contains various javascripts, I want to be able to test those scripts using QUnit, so

Where do I put the test scripts and QUnit artefacts?

In the mvc project? If yes, I then, presumably, need to remove these scripts via a build process when I deploy the application? Seems a bit rubbish? I really don't want test code mixed in with production code.

In a separate "test" web project? Great for better separation, but then I need some build action that will move my SUT scripts to this separate project so they can be referenced by test scripts. Probably preferable to option 1, but still a bit rubbish?

What's the best practice? Is there a best practice? Some other way I haven't mentioned? Any tools that can help? Have I missed something obvious?

This suggests the separate project + Xcopy type solution, but the answer is pretty old.

Thanks.

Upvotes: 6

Views: 2037

Answers (2)

Richard Banks
Richard Banks

Reputation: 12546

Like most people I like to keep tests separate from production code.

If you're using VS2012 (or later) and the Chutzpah test adapter then you can simply create a separate class library for your tests, much like you would for your .NET code.

Add a tests.js` file to the test class library and simply reference the appropriate scripts from the main project. For example, using Jasmine and Angular:

/// <reference path="../../MainProject/lib/angular/angular.js" />
/// <reference path="../../MainProject/lib/angular/angular-mocks.js" />
/// <reference path="../../MainProject/lib/angular/angular-resource.js" />
/// <reference path="../../MainProject/lib/jasmine.js" />
/// <reference path="../../MainProject/scripts/controllers.js" />

describe('My controller tests', function () {
  ...
});

If you want to avoid repeating all those reference paths in each test js file you have, you can add them to a _references.js file and then just reference that one script in your tests.js file. You'll need to manually reference the file because you're not in a web project and console projects don't have the same implicit references that web projects do.

Upvotes: 6

jeffo
jeffo

Reputation: 410

If you have a choice just place the tests and test infrastructure in the main code.

If you must separate, then most people just make a separate test project that reference the production code (including js scripts).

Upvotes: 0

Related Questions