【问题标题】:var is not defined in angular testingvar 未在角度测试中定义
【发布时间】:2018-06-13 10:00:51
【问题描述】:

我正在 protrator 中测试一个 Angular 应用程序,但不明白为什么会发生这种情况。

我有这个测试:

beforeEach(function() {
  
        browser.get('http://localhost:8080/#/');

...

        //name
        let name = element(by.css("*[id='field_nombre']"));
    
       }
       
        it('Scenario 1', function () {
        name.click();
        ....
它说名称未定义。

我这样做:

 beforeEach(function() {
      
            browser.get('http://localhost:8080/#/');

    ...

        
           }
           
            it('Scenario 1', function () {
             //name
            let name = element(by.css("*[id='field_nombre']"));
            name.click();
            ....

并且测试有效。有什么原因它无法识别 beforeeach 中的 teh vars initialisec 吗??

【问题讨论】:

  • 它们是两个不同的函数作用域。您可以在 beforeEach 函数之前取消它。
  • BeforeEach 在每个 it() 函数之前执行,并且每次执行 it() 时浏览器的一部分都会打开

标签: javascript html angular testing undefined


【解决方案1】:
let name;
beforeEach(function() {
  browser.get('http://localhost:8080/#/');
  name = element(by.css("*[id='field_nombre']"));
}      
it('Scenario 1', function () {
  name.click();
}

【讨论】:

  • 显然这就是原因!谢谢!
【解决方案2】:

beforeEach 有自己的独立功能范围,it 有自己的功能范围。我们无法从其他函数访问在 beforeeach 中初始化的变量。

在 beforeeach 函数之外初始化变量。

let name;
beforeEach(function() {

        browser.get('http://localhost:8080/#/'); 

        //name
        ame = element(by.css("*[id='field_nombre']"));
}   

【讨论】:

    【解决方案3】:
    let name = element(by.css("*[id='field_nombre']")); 
    

    名称在beforeEach() 中定义。所以名称的范围只能在beforeEach() 内使用。无法从方法外部访问它

    【讨论】:

    • 谢谢!这就是原因
    【解决方案4】:

    因为您的 let name = 与它的使用范围不同。

    在 JS 中 let 关键字将范围从函数范围缩小到块范围:

    for (let i = 0; i < 2; i++) {
        // i is visible
    }
    
    // i is no longer visible as it's scope is only inside `for`
    

    【讨论】:

      猜你喜欢
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多