4

我正在尝试对使用 AngularJS 编写的应用程序执行一些端到端测试。目前,我在 e2e.tests.js 中有以下测试设置:

describe('MyApp', function() {
    beforeEach(function() {
        browser().navigateTo('../index.html');
    });

    it('should be true', function() {
        expect(true).toBe(true);
    });
});

奇怪的是,这个基本测试失败了。测试本身运行。然而结果是:

203ms   browser navigate to '../index.html'
5ms expect undefined toBe true
           http://localhost:81/tests/e2e.tests.js:10:9
           expected true but was undefined

考虑到“true”是硬编码的,我希望它能够通过这个测试。我不知道真实的不确定性如何。我错过了什么?

4

2 回答 2

8

Angular 的 E2E 测试框架看起来像 Jasmine,但它不是 Jasmine。E2E测试代码其实都是异步的,但是写的很巧妙,调用看起来很正常。大多数调用会创建异步任务和稍后测试的 Future 对象。Future 对象有点像一个承诺,但有点不同。它有一个value属性,它在它准备好时设置,然后它调用一个done函数来移动到下一步。在 E2E 测试中,该expect函数采用 Future 对象,而不是值。您看到的undefined是因为expect是针对 进行测试future.value,在这种情况下是true.value,这是未定义的。

尝试使用返回期货的可用选择器之一,然后测试结果。像这样的东西:

expect(element("html").text()).toMatch("Our App");

Future 对象没有很好的文档记录,但是您应该能够像这样手动创建 Future :

var trueFuture = angular.scenario.Future(
    "a true value",            // name that is displayed in the results
    function(callback) {       // "behavior" function
        callback(null, true);  // supposed to call callback with (error, result)
    });
expect(trueFuture).toEqual(true);

如果你查看 ng-scenario 源代码,你可以在 angular.scenario.matcher function 中看到matcher 测试的地方future.value

于 2013-10-23T09:17:41.640 回答
0

我也遇到过类似的问题,这就是我发现的。您必须在配置文件中使用 ng-scenario 作为您的框架和 jasmine。事实是 ng-scenario 中的 expect 函数不接受任何 var 值或 Boolean 值。它只需要像这样的功能

expect(browser().location().path()).toContain('some/string')

或其他一些 ng-scenario 功能,例如

expect(element('some element').html()).toContain('some String');

期望函数中的任何变量值或布尔值都是未定义的。

如果您想使用Boolean(true/false)或希望通过测试,则必须从配置文件的框架部分中删除“ng-scenario”。只用茉莉花试试!

于 2016-10-04T13:23:04.383 回答