【问题标题】:Unit Testing + Jasmine + Angular单元测试 + Jasmine + Angular
【发布时间】:2016-08-22 08:50:31
【问题描述】:

我一直在“遇到声明异常”。我正在尝试为工厂编写我的第一个单元测试。好像 mocking 并没有真正起作用。

引用的路径如下所示:

///<reference path="~/App/js/jasmine/jasmine.js"/>
///<reference path="~/App/js/lib/40_Angular/angular.js"/>
///<reference path="~/App/js/jasmine/angular-mocks.js"/>

///<reference path="~/App/app.js"/>
///<reference path="~/App/services/userService.js"/>

我的示例测试如下所示:

describe("userService", function () {

 beforeEach(module("issApp"));

 describe("userService", function () {

 var userService;

 beforeEach(inject(function () {
  userService = $injector.get('userService');
 }));

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

 it('should have a farbSchema', function () {
  expect(userService.getParameter("ngFarbSchema")).toBeDefined();
 });
}); 

我的 app.js 是这样声明的:

iss.app = angular.module("issApp", ["ng", "ui.router" ...]);

userService.js 声明如下:

iss.app.factory("userService", function ($q, $http) {
 return {
    getParameter: getParameter,
    setParameter: setParameter,
    ...
 };
 function getParameter(parameterName) {
    var deferred = $q.defer();

    $http({
        url: iss.urls.base + iss.urls.getuserparam,
        method: "GET",
        params: { parameterName: parameterName }
    })
    .success(function (data) {
        deferred.resolve(data);
    })
    .error(function (error) {
        console.log("Fehler beim Aufruf userService.getParameter(): " + JSON.stringify(error));
    });

    return deferred.promise;
  }
  ...
});

这是我使用的工具版本:

Resharper:8.2.1

角度:1.5.8

Visual Studio:2013

茉莉花:2.4.1

【问题讨论】:

  • 我觉得你最好把工厂的代码贴出来……
  • 好的,我为工厂添加了更多代码。

标签: angularjs unit-testing jasmine resharper


【解决方案1】:
expect(userService.getParameter("ngFarbSchema")).toBeDefined();

我认为检查方法是否以这种方式定义并不好。 更好的方法是检查方法而不调用它:

expect(userService.getParameter).toBeDefined();

看看这个plnkr

【讨论】:

  • 我知道支票没用(语义上)。我只是尝试让 Resharper/VS 2013 运行和评估我的第一个单元测试。它一定是某种语法或设置错误。
  • 你理解错了,我没说没用,只是你需要更改测试和检查属性而不是调用它
  • 好的。我改变了它,但我仍然得到同样的错误。我很确定,测试在这一行失败: beforeEach(module("issApp"));
  • 很奇怪,可能是你的 issApp 模块定义有错误,可能你应该试试看应用程序是否在没有测试的情况下运行?另一个笨蛋 - plnkr.co/edit/ivCsQG?p=preview
  • 该应用程序正在运行。也许是一些参考或路由器问题?我将 ui-router 用于角度。我只是在 VS 中打开 test.spec.js,然后转到 Resharper 菜单并开始单元测试。我做错了吗?
猜你喜欢
  • 2017-04-04
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 2014-09-13
  • 1970-01-01
相关资源
最近更新 更多