gpt4 book ai didi

javascript - 在使用 typescript 的 Jasmine 测试中注入(inject) $http 失败

转载 作者:搜寻专家 更新时间:2023-10-30 21:53:47 31 4
gpt4 key购买 nike

我们正在用 Typescript 开发一个测试驱动的程序。这是我们对 Jasmine 的测试:

import IDifferentialPilotService = DifferentialPilot.IDifferentialPilotService;
import Ev3DifferentialPilotService = DifferentialPilot.Ev3DifferentialPilotService;
import IHttpService = ng.IHttpService;

describe("restClientService integration test: ", function () {

// sut
var ev3DifferentialPilotService: IDifferentialPilotService;

//doc
var http: IHttpService;

beforeAll(function () {
angular.mock.inject(function ($http: IHttpService) {
this.http = $http;
});
ev3DifferentialPilotService = new Ev3DifferentialPilotService(http);
});

it("robot should run 5 m", function () {
expect(ev3DifferentialPilotService.runDistance(5)).toBe("success");

});

});

被测试的类 Ev3DifferentialPilotService 如下所示:

namespace DifferentialPilot {
"use strict";

import IHttpService = ng.IHttpService;

export class Ev3DifferentialPilotService implements IDifferentialPilotService {
private http: IHttpService;

static $inject = ['$http'];
constructor($http: IHttpService) {
this.http = $http;
}

public runDistance(runDistance: number): string {
this.http({
method: "POST",
url: "10.0.0.44:8080/differentpilot/run/5"
}).then(function successCallback(response: any) {
return "success";
}, function errorCallback(response: any) {
return "error";
});

return undefined;
}
}
}

如您所见,我们想在测试中注入(inject) $http-service,以便 Ev3DifferentialPilotService 可以检索 Http-service 作为参数并在它的 runDistance 方法。当我们在 Ev3DifferentialPilotService 中记录 this.$http-Object 时,我们得到 undefined,这意味着注入(inject)失败。据此测试也失败了。

我正在将 Ev3DifferentialPilotService 注册为 App.js 中的服务:

var app = angular.module("AngularDifferentialPilotModule", []);
app.service("ev3DifferentialPilotService", DifferentialPilot.Ev3DifferentialPilotService);

我们在 karam.conf.js 中使用所有这些东西:

// Karma configuration
// Generated on Thu Dec 17 2015 14:02:38 GMT+0100 (Mitteleuropäische Zeit)

module.exports = function (config) {
config.set({

// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',


// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],


// list of files / patterns to load in the browser
files: [
"bower_components/angular/angular.js",
"bower_components/angular-mocks/angular-mocks.js",
"src/Ev3DifferentialPilotService.js",
"spec/*.spec.js",
"src/app.js"
],

// list of files to exclude
exclude: [],


// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {},


// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress'],


// web server port
port: 9876,


// enable / disable colors in the output (reporters and logs)
colors: true,


// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,


// enable / disable watching file and executing tests whenever any file changes
autoWatch: false,


// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['Firefox'],


// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: false,

// Concurrency level
// how many browser should be started simultanous
concurrency: Infinity
})
}

此外,我们正在使用看起来像这样的 tsconfig:

{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true
}

那么错误在哪里呢?有人可以帮助我吗?

最佳答案

你不能在 beforeAll ( https://github.com/angular/angular.js/issues/10238 ) 中注入(inject)

已打开一个功能 ( https://github.com/angular/angular.js/pull/14093 ) 但尚未合并。

关于javascript - 在使用 typescript 的 Jasmine 测试中注入(inject) $http 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34353081/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com