小编ilj*_*ilj的帖子

$ browser.notifyWhenNoOutstandingRequests不考虑控制器功能

我们正在用phantomjs测试角度webapp.

控制器代码如下所示:

angular.module('module' ['dependency']).
    controller('controller',function ($scope, Model) {
        // blah-blah-blah
        Model.list() // calls $http.get
            .then(); // yadda-yadda-yadda
    });
Run Code Online (Sandbox Code Playgroud)

后端是在java中,所以为了测试整个应用程序,我们使用的是Selenium Webdriver和PhantomJS.我使用这个片段来检查角度是否已经完成处理它的指令(从量角器源代码获得它).

var app = angular.element(document.querySelector('#ng-app'));
var $browser = app.injector().get('$browser');
$browser.notifyWhenNoOutstandingRequests(function () {
    // callback
});
Run Code Online (Sandbox Code Playgroud)

它工作正常 - 在大多数情况下,它确实可以检测角度处理请求.

问题是有时我的回调似乎甚至在控制器执行之前就会触发.在我注意到这种行为的所有情况下,这都是路线变化.我已经尝试插入alert('');控制器的不同部分来找到它.

所以,问题是 - 我怎样才能在执行控制器功能执行我的等待片段?

javascript automated-tests phantomjs angularjs selenium-webdriver

5
推荐指数
1
解决办法
2322
查看次数

使用量角器获取相同元素的不同值的数组

我正在尝试使用人力车和d3测试显示图形的应用程序.使用量角器和茉莉花实现测试.作为旁注,我认为这个问题并不是特定于这个用例,而且更为通用.

因此,测试应该将鼠标悬停在图形上并收集为每个点显示的文本(示例).然后将该数组与给定数组进行匹配.

我希望这个伪代码说明问题:

var graph = ... //
var promises = [];
var promise = graphElement.getSize().then(function(size){
    _.times(size, function(i) {
        moveMouse(i, 0); // move mouse to i-th pixel
        promises.push(graph.element(by.css('.hover-text')).getText());
    });
    return promises;
});

promise.magicallyWaitForAllOfThem();

_.each(promises, function(textPromise){
    expect(textPromise).toBe('something');
});
Run Code Online (Sandbox Code Playgroud)

所以,问题是因为我需要首先解析大小,我没有办法等待所有的promises解析并返回一个文本promise的数组,以后可以与expect()一起使用.

编辑:明确提到量角器/茉莉花.

javascript promise jasmine selenium-webdriver protractor

5
推荐指数
1
解决办法
479
查看次数

typescript:界面字段上的元数据

我正在尝试创建一个框架,该框架允许我在接口字段上拥有元数据。像这样的东西:

function path(path) {}

interface ITwoProps {
  @path('some/path') stringProp: string;
  @path('different/path') boolProp: boolean;
}

class Impl1 implements ITwoProps {
  get stringProp() {
    return 'abc';
  }
  get boolProp() {
    return !!'abc';
  }
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接

不幸的是,这甚至无法编译。错误消息有点晦涩,但其想法是装饰器在接口上隐式禁用。它确实有意义,因为接口不会将其转化为转译代码,因此不会有转译代码可以附加装饰器。

我还尝试了另一种方法,我将使用类似模式的对象定义元和接口,并从中提取接口:

const Schema = {
  boolProp: {
    type: Boolean,
    path: 'some/path'
  },
  stringProp: {
    type: String,
    path: 'different/path'
  },
};

type PropertyDef<T> = {
  type: (...args: any[]) => T,
  path?: string;
};

type ExtractType<X> = X extends PropertyDef<infer T> ? T : never;

type ObjectInterface<T extends …
Run Code Online (Sandbox Code Playgroud)

typescript

5
推荐指数
1
解决办法
1908
查看次数