我有一个使用 jest 的 react/typescript 项目,其中有一个自定义匹配器,例如:
export const MyCustomMatchers = {
toBeTheSameAsRemote: function(_util: any, _customEqualityTesters: any) {
return {
compare: function(actual: Brand, expected: RemoteBrand) {
const pass: boolean = attributesMatch(actual, expected);
const message: string = pass
? 'Local matches Remote'
: 'Local does not match Remote';
return { pass, message: () => message };
}
};
}
};
Run Code Online (Sandbox Code Playgroud)
我在我的测试中通过在describe函数内部进行引用:
beforeEach(() => {
jasmine.addMatchers(MyCustomMatchers);
});
Run Code Online (Sandbox Code Playgroud)
并在it函数中像这样使用:
expect(localValue).toBeTheSameAsRemote(remoteValue);
Run Code Online (Sandbox Code Playgroud)
测试运行正常,但打字稿编译器无法识别匹配器,这是有道理的,因为我没有在类型系统中的任何地方定义它
Property 'toBeTheSameAsRemote' does not exist on type 'JestMatchersShape<Matchers<void, MyType[]>, Matchers<Promise<void>, …Run Code Online (Sandbox Code Playgroud) 我试着
@Id
@Column(name = "MY_ID_FIELD")
@Convert(converter = IdConverter.class)
private Long id;
Run Code Online (Sandbox Code Playgroud)
IdConverter是:
@Converter
public class IdConverter implements AttributeConverter<Long, BigDecimal> {
@Override
public BigDecimal convertToDatabaseColumn(Long attribute) {
return BigDecimal.valueOf(attribute);
}
@Override
public Long convertToEntityAttribute(BigDecimal dbData) {
return dbData.longValue();
}
}
Run Code Online (Sandbox Code Playgroud)
转换器将映射BigDecimal,属性字段类型Hibernate期望在sql server数据库中id列类型为数字,为Long.
我正在使用Spring Data Jpa,我的存储库正在使用Long,正如我所期望的那样
@Repository
public interface CityRepository extends JpaRepository<City, Long> { }
Run Code Online (Sandbox Code Playgroud)
你知道它为什么不工作吗?
我无法想象我需要使用工厂提供商的情况.
根据官方文档https://angular.io/docs/ts/latest/guide/dependency-injection.html,情况是人们可能无法从另一个服务(服务)中访问服务(service-b)-a),但是,工厂功能确实(可以访问service-b).那么,什么时候真的会发生这样的事情呢?
我正在使用 MapStruct 生成的一个映射器:
@Mapper
public interface CustomerMapper {
Customer mapBankCustomerToCustomer(BankCustomerData bankCustomer);
}
Run Code Online (Sandbox Code Playgroud)
默认组件模型是spring(在pom.xml中设置)
<compilerArg>-Amapstruct.defaultComponentModel=spring</compilerArg>
Run Code Online (Sandbox Code Playgroud)
我有一个服务,我在其中注入了客户映射器,并且在运行应用程序时工作正常
@Autowired
private CustomerMapper customerMapper;
Run Code Online (Sandbox Code Playgroud)
但是当我运行涉及@SpringBootTest 的单元测试时
@SpringBootTest
@AutoConfigureMockMvc
@RunWith(SpringRunner.class)
public class SomeControllerTest {
@Mock
private SomeDependency someDependency;
@InjectMocks
private SomeController someController;
@Test
public void shouldDoSomething() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我得到一个 org.springframework.beans.factory.UnsatisfiedDependencyException
通过字段“customerMapper”表达的不满意依赖