Chai-as-promised testing example

Demonstrates a bug

HTML

<script src="http://mochajs.org/example/mocha.js"></script>
<link rel="stylesheet" href="http://mochajs.org/example/mocha.css">
<script src="http://chaijs.com/chai.js"></script>
<script src="https://raw.githubusercontent.com/domenic/chai-as-promised/master/lib/chai-as-promised.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.0/angular.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.0/angular-mocks.js"></script>
<!-- Mocha test output goes here. -->
<div id="mocha"></div>

JavaScript

/**
 * Configure Mocha
 */

mocha.setup("bdd");
chai.should();


/**
 * Test
 */

describe("Promise", function () {

	var $rootScope,
		$scope,
		$q;

	beforeEach(angular.mock.inject(function (_$rootScope_, _$q_) {
		$rootScope = _$rootScope_;
		$q = _$q_;
		$scope = $rootScope.$new();
	}));

	afterEach(function () {
		$scope.$apply();
	});

	it("should resolve promise and eventually return", function () {

		var defer = $q.defer();

		defer.resolve("incredible, this doesn't work at all");

 		return defer.promise.should.eventually.deep.equal("incredible, this doesn't work at all");
	});

	it("should resolve promises as expected", function () {

		var fst = $q.defer(),
			snd = $q.defer();

		fst
			.promise
			.then(function (value) {
				value.should.eql("phew, this works");
			});

		snd
			.promise
			.then(function (value) {
				value.should.eql("wow, this works as well");
			});

		fst.resolve("phew, this works");
		snd.resolve("wow, this works as well");

	 	var all = $q.all([
			fst.promise,
			snd.promise
		]);

 		return all.should.be.fullfiled;
	});

	it("should reject promise and eventually return", function () {
 		return $q.reject("no way, this doesn't work either?").should.eventually.deep.equal("no way, this doesn't work either?");
	});

	it("should reject promises as expected", function () {

		var promise = $q.reject("sadly I failed for some stupid reason");

		promise
			["catch"](function (reason) {
				reason.should.eql("sadly I failed for some stupid reason");
			});

	 	var all = $q.all([
			promise
		]);

 		return all.should.be.rejected;
	});

});


/**
 * Run
 */

mocha.run();