2017-02-23 127 views
0

我正在使用AngularJS实现我的第一个Web应用程序(只是遵循AngularJS教程),我正在使用Jasmine和Karma编写一些测试。茉莉花规格失败

这是我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); 
    expect(scope.name).toBe('world'); 
    })); 

}); 

哪个正常工作。但是,当我将其更改为:

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'); 
    })); 

}); 

第二种方法有什么问题?我认为,大致上,每个it声明对应于一个测试用例,并且每个describe声明对应于一个测试用例。那是错的吗?

谢谢。

+2

简单; 'scope'在你的第二个'it'函数中没有定义。它只在第一次被定义 – Phil

回答

1

它阻止不执行,就好像它们是一个延续。另外,scope变量对第一个测试是本地的。

如果我们打破它,第二个例子是大致这样做的:

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(); 

你可以看到,在第二次测试,有没有可用的范围或控制的变量。