I was having a rough time getting JasmineJS to work with Resharper/Chutzpah. The strange thing was that it would work in the specrunner but not in the actual resharper or chutzpah interfaces which directly integrate into Visual Studio (which is what i wanted).
After spending a couple hours of research i came upon this blog: http://microsoftwindowsblogger.blogspot.com/2013/10/best-unit-testing-angularjs-with.html
Basically you have to inject the script references into the unit test files (which i knew) but they must ALSO BE RELATIVE PATHS TO THE TEST FILE!
Here is an example of a working Jasmine Unit Test which integrates angularjs and works with both Chutzpah and Resharper 7+:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <reference path="../../Scripts/jasmine/jasmine.js" /> | |
/// <reference path="../../Scripts/angular.js" /> | |
/// <reference path="../../Scripts/angular-mocks.js" /> | |
/// <reference path="../../Scripts/angular-resource.js" /> | |
/// <reference path="../../Scripts/angular-route.js" /> | |
/// <reference path="../../Scripts/ui-bootstrap-tpls-0.6.0.js" /> | |
/// <reference path="../app.js" /> | |
/// <reference path="../DataEntry/DataEntryCtrl.js" /> | |
describe("DataEntryCtrl", function () { | |
var $scope = null; | |
var $controller = null; | |
var $httpBackend = null; | |
beforeEach(function () { | |
module("app"); | |
}); | |
beforeEach(function () {// we need to use toEqualData because the Resource has extra properties | |
// which make simple .toEqual not work. | |
this.addMatchers({ | |
toEqualData: function (expect) { | |
return angular.equals(expect, this.actual); | |
} | |
}); | |
}); | |
//you need to indicate your module in a test | |
// read: http://docs.angularjs.org/api/ngMock.$httpBackend | |
beforeEach(inject(function ($rootScope, _$controller_, _$httpBackend_) { | |
$scope = $rootScope.$new(); | |
$controller = _$controller_; | |
$httpBackend = _$httpBackend_; | |
// Fake all my services | |
//$httpBackend.whenGET("api/location").respond([]); | |
//$httpBackend.whenGET("api/tuitionType").respond([]); | |
//$httpBackend.whenGET("api/cohort").respond([]); | |
//$httpBackend.whenGET("api/course").respond([]); | |
var ctrl = $controller('DataEntryCtrl', { $scope: $scope }); | |
})); | |
// Actual Unit Tests | |
// Naming: Method_Scenario_ExpectedBehavior | |
it("oneEqualsOne_ReturnTrue", function () { | |
expect(1).toEqual(1); | |
}); | |
}); |
Here is yet another sample of AngularJS web app with Jasmine unit tests for Visual Studio (works with Chutzpah test runner):
ReplyDeleteAngularJS SPA Template for Visual Studio + Visual Studio Extension
My full tech stack at this point is C# + Nhibernate (MSSQL 2012) + Web API v2 + AngularJS including MSTEST (SQLite) + Jasmine. Once i got all the tech talking to each other it has turned out to be very easy to develop enterprise level applications.
DeleteThis comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteAngularjs Online Training Angularjs Training Angularjs Training Angularjs Training in Chennai Angularjs Training in Chennai Angularjs Course Angularjs Course Angular 2 Training in Chennai
ReplyDelete