Testing 如何为测试angular应用程序的karma e2e设置jasmine?

Testing 如何为测试angular应用程序的karma e2e设置jasmine?,testing,angularjs,jasmine,yeoman,karma-runner,Testing,Angularjs,Jasmine,Yeoman,Karma Runner,我尝试用karma和jasmine创建e2e测试,用yeoman创建。在我的karma-e2e.conf.js中,我添加了jasmine: files = [ JASMINE, JASMINE_ADAPTER, ANGULAR_SCENARIO, ANGULAR_SCENARIO_ADAPTER, 'test/e2e/**/*.js' ]; A需要异步测试,所以我需要使用运行、等待和等待 但如果我尝试使用它: it('test', function () {

我尝试用karma和jasmine创建e2e测试,用yeoman创建。在我的karma-e2e.conf.js中,我添加了jasmine:

files = [
   JASMINE,
   JASMINE_ADAPTER,
   ANGULAR_SCENARIO,
   ANGULAR_SCENARIO_ADAPTER,
   'test/e2e/**/*.js'
];
A需要异步测试,所以我需要使用运行、等待和等待

但如果我尝试使用它:

it('test', function () {
    runs(function () {
        ...
    });
});
Scenatio测试运行程序返回以下内容:

TypeError: Cannot call method 'runs' of null
    at runs (http://localhost:8080/adapter/lib/jasmine.js:562:32)
    at Object.<anonymous> (http://localhost:8080/base/test/e2e/eduUser.js:42:3)
    at Object.angular.scenario.SpecRunner.run   (http://localhost:8080/adapter/lib/angular-scenario.js:27057:15)
    at Object.run (http://localhost:8080/adapter/lib/angular-scenario.js:10169:18)

我不知道问题出在哪里。你能帮帮我吗?

带Karma的角度e2e测试不能使用JASMINE适配器。取而代之的是ANGULAR_SCENARIO_适配器,它与编写Jasmine测试有类似的感觉

适配器中的所有命令都是异步的。例如元素'nav-items'。count不返回数字,它返回一个未来的对象。将来的对象放置在队列中,并随着运行程序的进行异步执行。引述:

expectfuture.{matcher}:

[…]所有API语句都返回一个future对象,该对象在执行后会被赋值

如果您需要运行自己的异步测试代码,您可以扩展适配器的DSL,这比听起来容易。这个想法是,你返回你自己的未来,这可以由托比这样的匹配者来评估。这里有一些关于如何在中执行此操作的示例。记得给donenull打电话,myRetrunValue;当测试代码成功时,myRetrunValue是匹配程序计算的值。或者做了“你自己的错误信息”;如果你想让测试失败

更新:回答下面的问题。要模拟登录,首先在dsl中添加一个名为login的函数:

然后打电话:

beforeEach( function()
{
    expect( login('button.login') ).toBeTruthy();
});

使用Karma的角度e2e测试不能使用JASMINE适配器。取而代之的是ANGULAR_SCENARIO_适配器,它与编写Jasmine测试有类似的感觉

适配器中的所有命令都是异步的。例如元素'nav-items'。count不返回数字,它返回一个未来的对象。将来的对象放置在队列中,并随着运行程序的进行异步执行。引述:

expectfuture.{matcher}:

[…]所有API语句都返回一个future对象,该对象在执行后会被赋值

如果您需要运行自己的异步测试代码,您可以扩展适配器的DSL,这比听起来容易。这个想法是,你返回你自己的未来,这可以由托比这样的匹配者来评估。这里有一些关于如何在中执行此操作的示例。记得给donenull打电话,myRetrunValue;当测试代码成功时,myRetrunValue是匹配程序计算的值。或者做了“你自己的错误信息”;如果你想让测试失败

更新:回答下面的问题。要模拟登录,首先在dsl中添加一个名为login的函数:

然后打电话:

beforeEach( function()
{
    expect( login('button.login') ).toBeTruthy();
});

谢谢,看起来不错。我需要登录测试应用程序。因此,我想将登录添加到beforeach,并将注销添加到afterEach。登录后,点击我必须等待完成登录过程。你认为这个好方法是什么?@MarekL,我用一个代码示例更新了答案。这个答案对我有帮助,但我仍在努力。我创建了新的下一个问题,谢谢。这看起来不错。我需要登录测试应用程序。因此,我想将登录添加到beforeach,并将注销添加到afterEach。登录后,点击我必须等待完成登录过程。你认为这个好方法是什么?@MarekL,我用一个代码示例更新了答案。这个答案对我有帮助,但我仍在努力。我创建新的下一个问题