Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <title>Unit Testing Ember Data Model with hasMany Relationship</title>
  <meta name="description" content="guide: testing-models-1" />
  <meta charset="utf-8">
  <link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.14.0.css">
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="http://builds.handlebarsjs.com.s3.amazonaws.com/handlebars-v1.2.1.js"></script>
  <script src="http://builds.emberjs.com/tags/v1.5.1/ember.js"></script>
  <script src="http://builds.emberjs.com/tags/v1.0.0-beta.7/ember-data.prod.js"></script>
  <script src="http://code.jquery.com/qunit/qunit-1.14.0.js"></script>
  <script src="https://rawgithub.com/rpflorence/ember-qunit/master/dist/globals/main.js"></script>
</head>
<body>
  
  <div id="qunit"></div>
  <div id="ember-testing"></div>
</body>
</html>
 
/* Put your CSS here */
html, body {
    margin: 10px;
}
 
/*=================== APP ====================*/
App = Ember.Application.create();
App.Role = DS.Model.extend({
  name: DS.attr('string'),
  user: DS.belongsTo('user')
});
App.User = DS.Model.extend({
  name: DS.attr('string'),
  roles: DS.hasMany('role'),
  isInstructor: function(){
    return this.hasRole('instructor');
  }.property('roles'),
  hasRole: function(role_name){
    var roles = this.get('roles');
    if(!Ember.isEmpty(roles)){
      return roles.any(function(role){
        return role.get('name') === role_name;
      });
    }
    return false;
  }
});
App.MyClassDetailsController = Ember.ObjectController.extend({
  students: function () {
    return this.get('users').filter(function (user) {
      return !user.get('isInstructor');
    });
  }.property('content.users.@each')
});
/*=================== TESTS ====================*/
emq.globalize();
App.setupForTesting();
App.injectTestHelpers();
setResolver(Ember.DefaultResolver.create({ namespace: App }));
App.rootElement = '#ember-testing';
moduleFor('controller:my_class_details', 'MyClassDetailsController', {
});
test("students are computed correctly", function(){
  expect(1);
  var myClassDetailsController = this.subject();
  myClassDetailsController.set('model', Ember.ObjectProxy.create({
    id: 389,
    name: 'bfcoding 101',
    users: Ember.ArrayProxy.create({
      content: [
        Ember.ObjectProxy.create({id: 1,isInstructor: true, name: 'Joe', roles: Ember.ArrayProxy.create({content: [Ember.ObjectProxy.create({name: 'instructor'})]})}),
        Ember.ObjectProxy.create({id: 2,isInstructor: false, name: 'vs', roles: Ember.ArrayProxy.create({content: [Ember.ObjectProxy.create({name: 'student' })]})}),
        Ember.ObjectProxy.create({id: 3, isInstructor: false, name: 'Volcano', roles: Ember.ArrayProxy.create({content: [Ember.ObjectProxy.create({name: 'student'})]})})
      ]
    })
  }));
  var value = myClassDetailsController.get('students.length');
  equal(value, 2, 'expected 2 students but was ' + value);
});
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers