As it is the basic object type in Ember, being able to test a simple
Ember.Object
sets the foundation for testing more specific parts of your
Ember application such as controllers, components, etc. Testing an Ember.Object
is as simple as creating an instance of the object, setting its state, and
running assertions against the object. By way of example lets look at a few
common cases.
尽管Ember.Object
是Ember中得基础对象类型,然后能够测试一个简单的Ember.Object
是能测试Ember应用各个特定部分的基础。如控制器、组件等。测试Ember.Object
就如创建一个对象实例一样简单,设置其状态并针对对象进行断言。作为实例,下面将来介绍一些一般性的场景。
Testing Computed Properties
测试计算属性
Let’s start by looking at an object that has a computedFoo
computed property
based on a foo
property.
下面从一个具有基于foo
属性的computedFoo
计算属性的对象开始。
App.SomeThing = Ember.Object.extend({
foo: 'bar',
computedFoo: function(){
return 'computed ' + this.get('foo');
}.property('foo')
});
Within the test we’ll create an instance, update the foo
property (which
should trigger the computed property), and assert that the logic in our
computed property is working correctly.
在测试中,创建了一个实例,更新实例的foo
属性(这将触发计算属性),然后断言计算属性中得逻辑工作正常。
module('Unit: SomeThing');
test('computedFoo correctly concats foo', function() {
var someThing = App.SomeThing.create();
someThing.set('foo', 'baz');
equal(someThing.get('computedFoo'), 'computed baz');
});
Live Example
在线示例
Unit Testing Basics: Computed Properties
Testing Object Methods
测试对象方法
Next let’s look at testing logic found within an object’s method. In this case
the testMethod
method alters some internal state of the object (by updating
the foo
property).
下面再看一个测试对象方法逻辑的例子。在这里testMethod
方法修改了对象的一些内部状态(更新了foo
属性)。
App.SomeThing = Ember.Object.extend({
foo: 'bar',
testMethod: function() {
this.set('foo', 'baz');
}
});
To test it, we create an instance of our class SomeThing
as defined above,
call the testMethod
method and assert that the internal state is correct as a
result of the method call.
为了测试这个方法,首先创建了一个SomeThing
的实例,调用其testMethod
,然后断言内部状态与期望的一样。
module('Unit: SomeThing');
test('calling testMethod updates foo', function() {
var someThing = App.SomeThing.create();
someThing.testMethod();
equal(someThing.get('foo'), 'baz');
});
Live Example
在线示例
Unit Testing Basics: Method Side Effects
In the event the object’s method returns a value you can simply assert that the
return value is calculated correctly. Suppose our object has a calc
method
that returns a value based on some internal state.
在这里对象的方法返回了一个值,可以通过简单的断言来判断值是否被正确计算。假设对象有一个calc
方法,其基于一些内部的状态返回一个值。
App.SomeThing = Ember.Object.extend({
count: 0,
calc: function() {
this.incrementProperty('count');
return 'count: ' + this.get('count');
}
});
The test would call the calc
method and assert it gets back the correct value.
测试要调用calc
方法并断言其返回正确的值。
module('Unit: SomeThing');
test('testMethod returns incremented count', function() {
var someThing = App.SomeThing.create();
equal(someThing.calc(), 'count: 1');
equal(someThing.calc(), 'count: 2');
});
Live Example
在线示例
Unit Testing Basics: Method Side Effects
Testing Observers
测试观察器
Suppose we have an object that has an observable method based on the foo
property.
假设有一个对象其有一个观察foo
属性的方法。
App.SomeThing = Ember.Object.extend({
foo: 'bar',
other: 'no',
doSomething: function(){
this.set('other', 'yes');
}.observes('foo')
});
In order to test the doSomething
method we create an instance of SomeThing
,
update the observed property (foo
), and assert that the expected effects are present.
为了测试doSomething
方法,首先创建一个SomeThing
实例,然后修改被观察的属性(foo
),并断言期待的效果出现。
module('Unit: SomeThing');
test('doSomething observer sets other prop', function() {
var someThing = App.SomeThing.create();
someThing.set('foo', 'baz');
equal(someThing.get('other'), 'yes');
});