Javascript 业力代码执行

Javascript 业力代码执行,javascript,angularjs,karma-runner,Javascript,Angularjs,Karma Runner,查看来自的karma测试,我运行了以下测试 describe("Service: angelloModel", function() { // load the service's module beforeEach(module("Angello")); var modelService; //Initialize the service beforeEach(inject(function (angelloModel) { mode

查看来自的
karma
测试,我运行了以下测试

describe("Service: angelloModel", function() {
    // load the service's module
    beforeEach(module("Angello"));

    var modelService;

    //Initialize the service
    beforeEach(inject(function (angelloModel) {
        modelService = angelloModel;
        console.log("modelService:", modelService);
    }));

    console.log("after| modelService:", modelService);

    it("it should return seven different statuses", function() {
                console.log("it: modelService", modelService);
                ...
    });
});
控制台记录:

    after| modelService: undefined 
    modelService: Object ...
    it: modelService Object ..
是否未定义
modelService
,因为在运行设置
modelService
beforeach
之前执行了
console.log

最后,
it(…)
函数是否具有
modelService
对象的
值,因为
karma
在每个
之前调用
,然后运行
it

呃,是和是

如果您想了解更多细节,这里有一个简单的代码示例,演示您所询问的问题:

describe('suite', function() {

    var foo;

    beforeEach(function() {
       foo = 'bar';
    });

    console.log('foo: ' + foo);

    it('test', function() {
        console.log('foo: ' + foo);
    });

}
测试运行者(本例中为Karma)有两个不同的阶段:测试定义和测试执行

在测试定义阶段,将执行测试脚本,这将导致构建包含测试和套件的内部数据结构

  • 将调用测试框架的
    descripe
    api;此api将记录套件名称并调用作为第二个参数传递的函数
  • 将调用每个
  • api之前的
    ;此api将把作为参数传递的函数与立即封装的测试套件相关联,但不会执行它
    
  • 将执行
    console.log
    语句,记录
    foo:undefined
  • 将调用
    it
    api;这将记录测试名称和作为第二个参数传递的函数,并将它们与立即封闭的测试套件相关联,但同样,传递的函数将不会执行
  • 现在,测试运行程序将进入测试执行阶段,在此期间,测试框架将遍历其内部数据结构并执行定义的测试。在本例中:

  • 将执行在每个
  • api之前传递给
    的函数,将字符串值
    'bar'
    分配给变量
    foo
  • 将执行传递给
    it
    api的函数,从而记录
    foo:bar
  • 这可能是你真正想知道的——希望你觉得它有用