我目前正在使用Protractor为不起眼的Angular应用编写一些e2e测试。
我的应用程序运行良好,单元测试通过了所有测试,也使用了e2e …直到这一项:
appE2ESpec.js
describe('adding an item', function() { var items, addItemButton, startCount; beforeEach(function() { items = element.all(by.css('li.item')); addItemButton = element(by.id('addItemButton')); startCount = items.count(); }); it('should display a new item in list', function() { addItemButton.click(); expect(items.count()).toEqual(startCount+1); }); });
这就是我编写测试的方式,但是,
问题是: items.count()返回一个promise, 我知道 ,但是我无法迫使Protractor解决它。所以我得到这个:
Failures: 1) myApp adding an item should display a new item in list Message: Expected 6 to equal '[object Object]1'.
我尝试过的
items.count().then(function(count) { startCount = count; //console.log(startCount) --> "6" Perfect! });
但得到的最终结果相同......我不能把expect进入的then,我想到了这一点。
expect
then
附录:
console.log(startCount) 输出此:
console.log(startCount)
{ then: [Function: then], cancel: [Function: cancel], isPending: [Function: isPending] }
我可以写,.toEqual(6)但是我不想每次需要更改应用程序启动状态时都重写测试。
.toEqual(6)
任何想法?提前致谢!!
您需要先解决承诺,然后再进行断言。
量角器将解决您传递给Expect()的诺言,但不能在诺言中添加数字。您需要首先解决诺言的价值:
beforeEach(function() { ... items.count().then(function(originalCount) { startCount = originalCount; }); }); it('should display a new item in list', function() { ... expect(items.count()).toEqual(startCount+1); });