茉莉花规格失败了

时间:2017-02-23 00:04:25

标签: angularjs jasmine

我正在使用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语句对应一个测试套件。这是错的吗?

感谢。

1 个答案:

答案 0 :(得分: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();

您可以看到,在第二个测试中,没有可用的范围或控制器变量。