gpt4 book ai didi

javascript - 在 Jasmine 测试中为 Angular Constant 提供动态值

转载 作者:太空宇宙 更新时间:2023-11-04 16:09:37 24 4
gpt4 key购买 nike

我有一个常量被注入(inject)到 Controller 中,我需要编写一个测试来更改这个常量并期望不同的结果。我可以使用 $provide 来模拟常量,但根据我在网上找到的文章,我需要在模块声明中执行此操作,我认为是这样的:

beforeEach(module("someModule"));

beforeEach(function () {
module(function ($provide) {
$provide.constant('someConstant', false);
});
});

我后来像这样加载 Controller :

function createController() {

view = $controller(
"someController",
{
$scope: $injector.get("$rootScope").$new()
});

}

其中$controller$scope$injector都注入(inject)到我的主beforeEach

这确实提供了常量,并且如果我更改 beforeEach 中的值,它也会发生变化。但仅限于整个测试套件。我想在 describeit 中更改此常量,但我不知道如何更改。如果我将 $provide 向下移动到 describeit,我会收到错误:

Error: Injector already created, can not register a module!

我可以创建一个新文件,这可能就是我要做的,但是有没有办法可以$提供动态值?

最佳答案

让我们考虑这样的代码

Controller

angular.module('someModule', [])
.controller('someController', function($scope, someConstant) {
$scope.someProvidedValue = someConstant;
})

并进行测试

Controller 规范

describe('module', function () {

beforeEach(module("someModule"));

var createController;

beforeEach(inject(function (_$controller_, _$injector_) {
scope = _$injector_.get("$rootScope").$new()
createController = function createController(scope, obj) {
_$controller_("someController", {
$scope: scope,
someConstant: obj.someConstant
});
}
}))

it('someConstant', function () {
expect(scope.someProvidedValue).toBe(undefined)
createController(scope, {
someConstant: false
})
expect(scope.someProvidedValue).toBe(false)
})

it('someConstant', function () {
expect(scope.someProvidedValue).toBe(undefined)
createController(scope, {
someConstant: true
})
expect(scope.someProvidedValue).toBe(true)
})
})

与此同时,我正在寻找看起来更好的解决方案。

关于javascript - 在 Jasmine 测试中为 Angular Constant 提供动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41609179/

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