2017-02-23 18 views
0

AngularJSを使用して初めてのWebアプリケーション(AngularJSチュートリアルの直後)を実装しています.JasmineとKarmaを使用していくつかのテストを書いています。ジャスミン仕様が失敗する

describe('PhoneListController', function() { 

    beforeEach(module('phonecatApp')); 

    it('should create a `phones` model with 3 phones', inject(function($controller) { 
    var scope = {}; 
    var ctrl = $controller('PhoneListController', {$scope: scope}); 

    expect(scope.phones.length).toBe(3); 
    expect(scope.name).toBe('world'); 
    })); 

}); 

正しく動作:

これは私のapp.spec.jsファイルです。しかし、私がそれを変更すると、

describe('PhoneListController', function() { 

    beforeEach(module('phonecatApp')); 

    it('should create a `phones` model with 3 phones', inject(function($controller) { 
    var scope = {}; 
    var ctrl = $controller('PhoneListController', {$scope: scope}); 

    expect(scope.phones.length).toBe(3); 
    })); 

    it('should have world as a name', inject(function($controller) { 
    expect(scope.name).toBe('world'); 
    })); 

}); 

2番目のアプローチでは何が問題になっていますか?おおよそ各it文が1つのテストケースに対応し、各describe文が1つのテストスイートに対応すると私は考えました。それは間違っていますか?

ありがとうございました。

+2

簡単です。 'scope'はあなたの2番目の' it'関数で定義されていません。それは最初に定義されたものです – Phil

答えて

1

itブロックは、連続であるかのように実行されません。また、変数scopeは、最初のテストにローカルです。我々はそれを打破した場合

、2番目の例では、大まかにやっている:

function test1() { 
    module('phonecatApp'); 
    var scope = {}; 
    var ctrl = $controller('PhoneListController', {$scope: scope}); 

    expect(scope.phones.length).toBe(3); 
} 

function test2() { 
    module('phonecatApp'); 
    expect(scope.name).toBe('world'); 
} 

test1(); 
test2(); 

をあなたは第二の試験では、利用可能な範囲またはコントローラの変数がありませんことがわかります。

関連する問題