Comments (9)
Hmmm. Not terribly obvious is it.
Right now it simply stubs out everything in order to disable routing without blowing up.
My thought was that, you would inject $state
into your test (perhaps in a beforeEach
) and then monkey-patch as you need.
Here's what I had in mind:
beforeEach(function() {
// get fake $state router service
bard.inject(this, '$state');
// plug in fake $state router values for this set of tests
$state.current = {/* fake values here */};
$state.state = {/* fake values here */};
})
I confess I haven't actually tried it. Perhaps you will be the first and give me some feedback :-)
from bardjs.
I released v.0.1.5 with these comments.
from bardjs.
@zuzana does that answer your question?
from bardjs.
unfortunately not, the get
function I would need to fake gets executed before I am able to inject because it is part of module.run
.
I went around it like this:
beforeEach(function() {
module('myApp.home', function($stateProvider){
$stateProvider.$get = function() {
return {
get: sinon.stub()
};
};
});
bard.inject(this, '$controller', '$rootScope');
});
It might be useful to change the concatenation order in following code:
function appModule() {
var args = Array.prototype.slice.call(arguments, 0);
args = args.concat(fakeRouteHelperProvider, fakeRouteProvider,
fakeStateProvider, fakeToastr);
return angular.mock.module.apply(angular.mock, args);
}
to
function appModule() {
var args = Array.prototype.slice.call(arguments, 0);
args = [fakeRouteHelperProvider, fakeRouteProvider,
fakeStateProvider, fakeToastr].concat(args);
return angular.mock.module.apply(angular.mock, args);
}
so that way, if fakeStateProvider is not enough, I can override it with my own that has mocked properties I need.
bard.appModule('myApp.home', myFakeStateProvider);
But then again, appModule
is meant to save lines, and since I'm adding to it my own fakers, then I better just use module
.
from bardjs.
Chalk up another example of why I avoid module.run
! It never gives you a chance to fake the run
handler.
If I do need run
, I make sure that anything substantive calls an injected service. Then I can fake that service and control its behavior and the run
behavior indirectly.
Perhaps "avoid run
" is a tip for the style guide.
FWIW, your approach of faking the stateProvider
on your own is what I would do. The bard version wont help you and I don't think I can improve the bard version without making it more complex.
from bardjs.
ok, thanks for your responses, going to close this.
from bardjs.
cc // @chintan-patel @johnpapa
from bardjs.
Why not changing the order of concatenation as @zuzana suggested ? That would allow to still use the faked services while being able to override them ?
from bardjs.
I've avoided using bard.appModule for this reason. Wondering if we should just remove it @wardbell
from bardjs.
Related Issues (20)
- Issue testing routes using bardjs
- Failed to instantiate module function fakeRouteProvider
- mockService cannot omit config HOT 2
- Mocking a Data Service
- Mock Data Undefined HOT 1
- Type error 'undefined' evaluating 'bard.appModule....' HOT 2
- How to test Controller with $scope? HOT 11
- ReferenceError: Can't find variable: getinjectargs HOT 1
- Unable to test using PhantomJS HOT 6
- Unit testing with ng-html2js and Bard.js possible
- Mock resolving promise
- add components (angular 1.5 ) option to bardjs HOT 3
- Missing plugin for ESLint HOT 8
- Compile errors with Bard + Typescript + Jasmine HOT 3
- Unable to install - "Not compatible with your operating system or architecture: [email protected]"
- How to test a service with mocked dependencies services HOT 1
- This repo needs a new caretaker
- Publish v0.1.10 to npm
- MockService Doesn't Work with Services Defined as an ES6 Class
- v
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bardjs.